2017-02-22 6 views
0

Я получаю массив, которым я не контролирую. К сожалению, он проходит через строку, хотя все значения: всегдаint значения.Как заказать строки, которые представляют значения int

Невозможно изменить массив, чтобы я работал с ним.

Я бы хотел их отсортировать, но, конечно, «10» (как строка) доходит до «4» (в виде строки). Я понимаю, почему.

Не преобразовывая значения массива в значения int, есть ли способ заказать strings, как если бы они были int? Я знаю, что преобразование - лучший способ, но любопытно, что при использовании string.

В этом примере, не будет отрицательные значения

Мой массив может быть

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

, но я хотел бы показать, как

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

Почему вы не можете преобразовать их в 'int'? 'strings.OrderBy (int.Parse)' было бы очевидным способом сделать это. – Lee

ответ

2

Да, вы можете заказать их по длине строки:

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

Обратите внимание, что это только теоретическое решение для вашего особого интереса к «не разбору» и работает только в том случае, если строки не содержат отрицательных значений или ведущих нулей, а только символы «0» - «9» (нет специального юникода число символов и т. д.). В продуктивном коде вам определенно нужно разобрать строки, чтобы получить правильные результаты, поскольку Servy уже правильно указал в комментариях.

+1

По вашему мнению, «5» меньше «02» – Servy

+2

@Servy согласно OP строка будет «2» не «02». –

+0

Вопрос не говорит о такой вещи. В нем говорится, что все они целые, вот и все. – Servy

2

Я предполагаю, что вы имеете в виду, вы должны держать их как строки, не то, что вы в буквальном смысле запрещено когда-либо разобрать их на всех:

string[] a = GetArray(); 

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

Я ценю, что это, вероятно, лучший ответ, поскольку это лучший способ, но поскольку мой вопрос заключался в понимании моего варианта со строками, я дал плюс 1 – MyDaftQuestions

+0

@MyDaftQuestions Ah, OK. Я сказал, что просто догадывался! Приветствия. –

+0

Скорее всего, я закончу, но мой вопрос был не в этом. Я бы дал еще один +1, если бы мог – MyDaftQuestions

2

Вы могли бы попробовать что-то вроде этого:

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

Если вы знаете, насколько велики ваши цифры, вы можете использовать более разумное значение для maxStringLength.

Смежные вопросы