Добавить сортировку в linq - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующий код:

lclFullsys = "10090807060504030201"

lclFullSys = "[" & string.Join(",", lclFullSys.Select(Function (x, n) New With { x, n }).GroupBy(Function (x) x.n \ 2, Function (x) x.x).Select(Function (y) New String(y.ToArray()))) & "]"

, который создает строку ниже

[10,09,08,07,06,05,04,03,02,01]

Я хотел бы добавить сортировку для получения строки ниже:

[01,02,03,04,05,06,07,08,09,10]

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Маги c функция .OrderBy(Function(x) x), где x - параметр (как String в вашем случае), а функция возвращает OrderedEnumerable по этому параметру.

lclFullsys = "[" & String.Join(",", lclFullsys.Select(Function(x, n) New With {x, n}).GroupBy(Function(x) x.n \ 2, Function(x) x.x).Select(Function(y) New String(y.ToArray())).OrderBy(Function(x) x)) & "]"
0 голосов
/ 06 августа 2020

РЕДАКТИРОВАТЬ

Я видел, как вы редактировали свой пост, поэтому я тоже отредактирую свой ответ. Я просто изменил содержимое lclFullSys в соответствии с вашим вводом и получил желаемый результат:

C#:

string lclFullsys = "[10,09,08,07,06,05,04,03,02,01]";
var orderedChars =
    (from c in lclFullsys.Replace("[", "")
                         .Replace("]", "")
                         .Split(',')
        orderby int.Parse(c)
        select int.Parse(c).ToString("00")).ToArray();
string result = "[" + string.Join(",", orderedChars) + "]";

VB. NET:

Dim lclFullsys As String = "[10,09,08,07,06,05,04,03,02,01]"
Dim orderedChars = (From c In lclFullsys.Replace("[", "").Replace("]", "").Split(","c) Order By Integer.Parse(c) Select Integer.Parse(c).ToString("00")).ToArray()
Dim result As String = "[" & String.Join(",", orderedChars) & "]"

Вывод: "[01,02,03,04,05,06,07,08,09,10]"

Примечание: код C# конвертируется в VB. NET с помощью конвертера кодов Telerik так что я надеюсь, что он будет работать и в VB. NET тоже.

...