Konvertieren Sie eine Zeichenfolgendarstellung einer Zahl in C [in int []

8

Was ist die kürzeste C # -Anweisung, die eine Zeichenfolgendarstellung einer Zahl in eine konvertiert int[], die jede Ziffer enthält?

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();

Kann jemand meinen letzten Ansatz schlagen?

JJS
quelle
Möglicherweise möchten Sie die Sprache nicht angeben, da dies CodeGolf ist.
Phase
1
@phase du musst mich veräppeln. Die Sprache ist im Titel und im Tag.
JJS
2
Der Kommentar von @ phase bezieht sich auf die Tatsache, dass 99% der "Fragen" auf dieser Site tatsächlich Programmierwettbewerbe sind. Die Community hat jedoch entschieden, dass sprachspezifische "Tipps" -Fragen wie diese ebenfalls zum Thema gehören.
Dennis
@ Tennis Danke für den Rat. Erster Beitrag auf dieser Seite, würde normalerweise auf Stackoverflow posten, aber diese Community betrachtet Code-Golf als Off-Topic
JJS
@ Tennis Ich wollte gerade Meta dafür suchen! Ich denke, das wäre eine schöne Golffrage, wenn sie noch nicht gestellt worden wäre.
Phase

Antworten:

10

28 Bytes

Sie können Ihre letzte Ansatz ein bisschen kürzer durch das Ersetzen der machen '0'durch 48. Sie können auch alle unnötigen Leerzeichen entfernen und 1-stellige Variablennamen verwenden (z. B. number-> n):

n.Select(i=>i-48).ToArray();
ProgramFOX
quelle
Fantastisch - nagelt wirklich die Tatsache, dass ein Char arithmatische Operatoren als Short stackoverflow.com/a/1516639/26877
JJS
Die Subtraktion könnte auch durch &15bei gleicher Zeichenanzahl ersetzt werden.
Peter Taylor
3

C # ohne LINQ, 97 86 82 Bytes

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

Ich habe eine Weile im Schatten gehangen und wollte das ausprobieren. Ich bin kein Golfer oder sogar so erfahren mit C #, aber ich wollte sehen, wie klein ich es alleine bekommen kann, ohne LINQ zu verwenden. Es ist nichts Besonderes, aber zumindest hatte ich meinen Spaß.

Ich hatte zunächst nicht vor, dies zu veröffentlichen, da es viel länger ist als jede gute LINQ-Lösung und nicht wirklich hierher gehört, aber ich bin ein bisschen neugierig, ob es einen kürzeren Weg gibt, dies ohne LINQ zu tun.

Edit 1 : Anstelle von int.Parse wird jetzt 48 vom ASCII-Code des Zeichens abgezogen. Nun, das ist schon viel besser. 2 : Jetzt mit var anstelle von string und int [].

namenlos niemand
quelle
Verwenden varanstelle von stringund int[]spart auch 4.
Peter Taylor
3

76 Bytes

number.ToCharArray().Select(var=>Convert.ToInt32(var.ToString())).ToArray();
user44687
quelle