Как разбить эту строку и отсортировать по номеру версии - PullRequest
2 голосов
/ 14 мая 2010

У меня есть приложение ASP, которое имеет строковый массив как таковой (их гораздо больше):

    7.5.0.17 Date: 05_03_10
    7.5.0.18 Date: 05_03_10
    7.5.0.19 Date: 05_04_10
    7.5.0.2 Date: 02_19_10
    7.5.0.20 Date: 05_06_10
    7.5.0.3 Date: 02_26_10
    7.5.0.4 Date: 03_02_10
    7.5.0.5 Date: 03_08_10
    7.5.0.6 Date: 03_12_10
    7.5.0.7 Date: 03_19_10
    7.5.0.8 Date: 03_25_10
    7.5.0.9 Date: 03_26_10
    7.5.1.0 Date: 05_06_10

Как мне отсортировать эти строки по убыванию версии?

Ответы [ 2 ]

2 голосов
/ 14 мая 2010

Сделать ключевой селектор, который превращает версию в число:

string[] versions = {
  "7.5.0.17 Date: 05_03_10",
  "7.5.0.18 Date: 05_03_10",
  "7.5.0.19 Date: 05_04_10",
  "7.5.0.2 Date: 02_19_10",
  "7.5.0.20 Date: 05_06_10",
  "7.5.0.3 Date: 02_26_10",
  "7.5.0.4 Date: 03_02_10",
  "7.5.0.5 Date: 03_08_10",
  "7.5.0.6 Date: 03_12_10",
  "7.5.0.7 Date: 03_19_10",
  "7.5.0.8 Date: 03_25_10",
  "7.5.0.9 Date: 03_26_10",
  "7.5.1.0 Date: 05_06_10"
};

versions = versions.OrderBy(
  s => s.Substring(0, s.IndexOf(' ')).Split('.')
  .Aggregate(0, (n, v) => n * 100 + Int32.Parse(v))
).ToArray();

foreach (string s in versions) Console.WriteLine(s);

Выход:

7.5.0.2 Date: 02_19_10
7.5.0.3 Date: 02_26_10
7.5.0.4 Date: 03_02_10
7.5.0.5 Date: 03_08_10
7.5.0.6 Date: 03_12_10
7.5.0.7 Date: 03_19_10
7.5.0.8 Date: 03_25_10
7.5.0.9 Date: 03_26_10
7.5.0.17 Date: 05_03_10
7.5.0.18 Date: 05_03_10
7.5.0.19 Date: 05_04_10
7.5.0.20 Date: 05_06_10
7.5.1.0 Date: 05_06_10
1 голос
/ 14 мая 2010

Вот VB-версия кода @ Guffa. Я также сократил его, используя встроенный тип версии .Net, который уже сортируется:

    'Your comes from a text-file, so load your data into S
    Dim S = "7.5.0.17 Date: 05_03_10" & vbNewLine & _
    "7.5.0.18 Date: 05_03_10" & vbNewLine & _
    "7.5.0.19 Date: 05_04_10" & vbNewLine & _
    "7.5.0.2 Date: 02_19_10" & vbNewLine & _
    "7.5.0.20 Date: 05_06_10" & vbNewLine & _
    "7.5.0.3 Date: 02_26_10" & vbNewLine & _
    "7.5.0.4 Date: 03_02_10" & vbNewLine & _
    "7.5.0.5 Date: 03_08_10" & vbNewLine & _
    "7.5.0.6 Date: 03_12_10" & vbNewLine & _
    "7.5.0.7 Date: 03_19_10" & vbNewLine & _
    "7.5.0.8 Date: 03_25_10" & vbNewLine & _
    "5.7.0.9 Date: 03_26_10" & vbNewLine & _
    "7.5.1.0 Date: 05_06_10"

    Dim v2 = Split(S, vbNewLine).OrderBy(Function(f) New Version(f.Substring(0, f.IndexOf(" "c))))
    For Each v In v2
        Trace.WriteLine(v)
    Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...