【问题标题】:Correct way for sorting a String array对字符串数组进行排序的正确方法
【发布时间】:2014-04-07 15:32:51
【问题描述】:
System.Collections.Generic.IEnumerable<String> lines = File.ReadLines("K:\\file.txt");

该文件包含以下数据

1
2
3
99
32
HR210
Redmond City Room A
23
Telephone Conference
HR252

每行有 1 个条目,代表建筑物中的一个房间。

如何按数字和字母顺序对其进行排序。所以我的结果看起来像

1
2
3
23
32
99
HR210
HR252
Redmond City Room A
Telephone Conference

字母部分在数字之后。

【问题讨论】:

  • 您尝试了 OrderBy() 并没有让您满意?
  • 另一个问题是:10 是在 2 之前还是之后?
  • 您是否会有任何以数字开始但后面包含字母字符的字符串? (例如123ABC)。如果是这样,应该如何排序?
  • 看看自然比较器:stackoverflow.com/questions/8568696/…
  • 为什么投反对票?似乎是一个合理的问题

标签: c# arrays sorting


【解决方案1】:

您可以使用 int.TryParse 和匿名类型 + Enumerable.OrderBy

int i;
lines = lines
    .Select(l => new { Line = l, IsText = !int.TryParse(l, out i), Value = i })
    .OrderBy(x => x.IsText)
    .ThenBy(x => x.Value).ThenBy(x => x.Line)
    .Select(x => x.Line);

.OrderBy(x =&gt; x.IsText) 返回一个bool,其中true“高于”false。这就是为什么所有文本行都排在最后的原因。

【讨论】:

    【解决方案2】:

    您需要实现自己的 IComparer。您可以使用this method 使用内置函数轻松创建它。如果你必须自己写,蒂姆的答案会给你你想要的。

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 2014-05-11
      • 2016-08-09
      • 2012-08-20
      相关资源
      最近更新 更多