Konversi representasi string dari angka ke int [] di C #


8

Apa pernyataan C # terpendek yang akan mengonversi representasi string dari angka menjadi angka int[]yang berisi setiap digit?

string number = "1234";
number.Array.ConvertAll(line.ToCharArray(), c => Int32.Parse(c.ToString()));
number.ToCharArray().Select(i => Convert.ToInt32(i.ToString())).ToArray();
number.Select(i => Int32.Parse(i.ToString())).ToArray();
number.Select(i => i - '0').ToArray();

Adakah yang bisa mengalahkan pendekatan terakhir saya?


Anda mungkin tidak ingin menentukan bahasa, karena ini adalah CodeGolf.
fase

1
@ fase Anda pasti bercanda. bahasa dalam judul dan tag.
JJS

2
Komentar @ phase mengacu pada fakta bahwa 99% dari "pertanyaan" di situs ini sebenarnya adalah kontes pemrograman. Namun, komunitas telah memutuskan bahwa pertanyaan "kiat" khusus bahasa seperti ini juga tentang topik.
Dennis

@Dennis thx atas sarannya. posting pertama di situs ini, biasanya akan diposting di stackoverflow, tetapi komunitas itu mempertimbangkan kode-golf dari topik
JJS

@ Dennis Saya baru saja akan mencari meta untuk itu! Saya pikir ini akan menjadi pertanyaan golf yang bagus, jika belum ditanyakan.
fase

Jawaban:


10

28 byte

Anda dapat membuat pendekatan terakhir Anda sedikit lebih pendek dengan mengganti '0'dengan 48. Anda juga dapat menghapus semua spasi yang tidak perlu dan menggunakan nama variabel 1-char (misalnya, number-> n):

n.Select(i=>i-48).ToArray();

Fantastis - benar-benar memukau fakta bahwa Char menangani operator aritmatik sebagai Short stackoverflow.com/a/1516639/26877
JJS

Pengurangan juga bisa diganti dengan &15untuk jumlah karakter yang sama.
Peter Taylor

3

C # tanpa LINQ, 97 86 82 byte

var n=Console.ReadLine();int i=n.Length;var o=new int[i];while(i>0)o[--i]=n[i]-48;

Saya telah menggantung di bayang-bayang untuk sementara waktu dan ingin mencoba ini. Saya bukan pegolf, atau bahkan yang berpengalaman dengan C #, tetapi saya ingin melihat seberapa kecil saya bisa mendapatkannya sendiri, tanpa menggunakan LINQ. Tidak ada yang istimewa, tapi setidaknya aku bersenang-senang.

Saya tidak berencana memposting ini pada awalnya, karena ini jauh lebih lama daripada solusi LINQ yang baik dan tidak benar-benar cocok di sini, tapi saya agak penasaran jika ada cara yang lebih singkat untuk melakukannya tanpa LINQ.

Sunting 1 : Alih-alih int.Parse sekarang mengurangi 48 dari kode ASCII char. Yah, itu sudah jauh lebih baik. 2 : Sekarang dengan var bukan string dan int [].


Menggunakan varalih-alih stringdan int[]juga menyimpan 4.
Peter Taylor

3

76 byte

number.ToCharArray().Select(var=>Convert.ToInt32(var.ToString())).ToArray();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.