2017-02-22 3 views
0

Ich erhalte ein Array, das ich nicht unter Kontrolle habe. Leider kommt es als String durch, obwohl alle Werte immerint Werte sind.So bestellen Sie Strings, die int-Werte darstellen

Es gibt keine Option, das Array zu ändern, also muss ich damit arbeiten.

Ich würde sie gerne sortieren, aber natürlich, "10" (als String) kommt vor "4" (als String). Ich verstehe warum.

, ohne die Werte des Arrays zu int Werte umzuwandeln, ist es eine Möglichkeit, die strings als ob sie int waren zu bestellen? Ich weiß, Konvertierung ist ein besserer Weg, aber neugierig auf die Option bei der Verwendung string.

In diesem Beispiel wird es keine negativen Werte sein

Mein Array

"10" 
"11" 
"2" 
"4" 

sein könnte, aber ich würde es als

"2" 
"4" 
"10" 
"11" 
+3

Warum können Sie sie nicht in 'int' konvertieren? 'strings.OrderBy (int.Parse)' wäre der offensichtliche Weg, dies zu tun. – Lee

Antwort

2

Ja, können Sie gerne zeigen bestellen sie durch die Länge der Schnur zuerst:

string[] input = /* wherever it comes from */ 
string[] result = input.OrderBy(s => s.Length).ThenBy(s => s).ToArray(); 

Beachten Sie, dass dies nur eine theoretische Lösung für Ihr spezielles Interesse an "nicht syntaktisch" ist und nur funktioniert, wenn die Strings keine negativen Werte oder führende Nullen enthalten und nur die Zeichen '0' - '9' (kein spezieller Unicode) Zahlensymbole usw.). Im produktiven Code sollten Sie die Strings unbedingt analysieren, um korrekte Ergebnisse zu erhalten, wie Servy bereits in den Kommentaren richtig hervorgehoben hat.

+1

Laut Ihnen "5" ist weniger als "02" – Servy

+2

@Servy nach OP wird die Zeichenfolge "2" nicht "02" sein. –

+0

Die Frage sagt nichts dergleichen. Es sagt, dass sie alle ganze Zahlen sind, das ist alles. – Servy

2

Ich vermute, Sie meinen, Sie müssen sie als Strings halten, nicht, dass Sie buchstäblich sie jemals zu analysieren gar verboten:

string[] a = GetArray(); 

a = a.OrderBy(s => int.Parse(s)).ToArray(); 
+1

Ich schätze das ist wahrscheinlich die bessere Antwort, da es der bessere Weg ist, aber da meine Frage war zu verstehen, meine Option mit Strings, habe ich ein Plus gegeben 1 – MyDaftQuestions

+0

@MyDaftQuestions Ah, OK. Ich habe gesagt, dass ich nur rate! Prost. –

+0

Es ist wahrscheinlich, was ich am Ende tun werde, aber meine Frage war nicht darüber. Ich würde ein weiteres +1 geben, wenn ich könnte – MyDaftQuestions

2

Sie könnten so etwas wie dies versuchen:

int maxStringLength = int.MaxValue.ToString().Length; 
string[] a = { "1", "11", "20", "2", "10" }; 
a = a.OrderBy(x => x.PadLeft(maxStringLength, '0')).ToArray(); 

Wenn Sie wissen, wie groß Ihre Zahlen sein werden, können Sie einen vernünftigeren Wert für maxStringLength verwenden.

Verwandte Themen