2010-10-11 6 views
3
string strArr="5,3,8,1,9,2,0,6,4,7"; 

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

string result ="0,1,2,3,4,5,6,7,8,9"; 

Любая идея?

+0

Пожалуйста, улучшить свой английский, или, по крайней мере, попытаться общаться доходчиво. –

+0

Я считаю, что этот путь лучше. – william

ответ

20

Split, сортировать и присоединиться:

string[] nums = strArr.Split(','); 
Array.Sort(nums); 
string result = String.Join(",", nums); 

Или:

string result = 
    String.Join(",", 
    strArr.Split(',') 
    .OrderBy(s => s) 
    .ToArray() 
); 

Если у вас есть строка с большими числами, которые должны быть отсортированы численно, вы не можете сортировать их как строки, как например «2»> «1000». Вы бы преобразовать каждую подстроку в число, сортируют, а затем преобразовать их обратно:

string result = 
    String.Join(",", 
    strArr 
     .Split(',') 
     .Select(s => Int32.Parse(s)) 
     .OrderBy(n => n) 
     .Select(n => n.ToString()) 
     .ToArray() 
); 

Или, как mastoj предложил, разобрать строки сортировкой:

string result = 
    String.Join(",", 
    strArr 
     .Split(',') 
     .OrderBy(s => Int32.Parse(s)) 
     .ToArray() 
); 
+1

Первое решение, отличное от linq, не будет работать, начиная с строк 2character, например. «10» будет меньше «2». +1 для linq. – Grozz

+1

Ваш последний запрос linq длинный. Этого должно быть достаточно с String.Join (",", strArr.Split (','). OrderBy (n => Int32.Parse (n)). ToArray()); –

+0

Я думаю, что это решит проблему: string result = String.Join (",", strArr.Split (','). Выберите (p => Convert.ToInt32 (p)). OrderBy (s => s). Выберите (p => p.ToString()). ToArray()); – Homam

2

При расщеплении и соединения:

string strArr = "5,3,8,1,9,2,0,6,4,7"; 
string[] sArr = strArr.Split(','); 
Array.Sort(sArr); 
string result = string.Join(",", sArr); 
0

Вы можете создать массив string с методом string.split(char[]).

С помощью этого массива вы можете вызвать метод Array.Sort(T), который будет сортировать элементы в порядке возрастания по возрастанию (для вашего примера).

С помощью этого отсортированного массива вы можете позвонить String.Join(string, object[]), чтобы снова спрятать его в строку.

3

Сокращенный вариант одной из версий в ответ Guffa в:

var res = String.Join(",", str.Split(',').OrderBy(y => int.Parse(y)).ToArray()); 
0
string arr = "5,3,8,1,9,2,0,6,4,7"; 
string result = arr.Split(',').OrderBy(str => Int32.Parse(str)).Aggregate((current, next) => current + "," + next); 
Смежные вопросы