【问题标题】:Sorting a string based array on two conditions根据两个条件对基于字符串的数组进行排序
【发布时间】:2014-01-25 21:47:53
【问题描述】:

我有一个这样的字符串数组

May#01
April#02
Jan#03

我需要先按字母顺序排序,然后按 # 旁边的数值排序。 字母排序很明显,但我似乎没有得到数字部分。

【问题讨论】:

    标签: c#


    【解决方案1】:

    按值排序字符串(这将为您提供字母排序)。然后按#字符后的整数值过滤:

    array.OrderBy(s => s)
         .ThenBy(s => Int32.Parse(s.Split('#')[1]))
    

    示例:

    string[] array = { "May#01", "April#02", "Jan#03", "April#01" };
    var query = array.OrderBy(s => s)
                     .ThenBy(s => Int32.Parse(s.Split('#')[1]));
    

    结果:

    "April#01"
    "April#02"
    "Jan#03"
    "May#01"
    

    【讨论】:

      【解决方案2】:
          var input = new[] { "May#01", "April#02", "Jan#03", "Jan#02", "Jan#1" };
          var result = input.OrderBy(s => s.Split('#')[0])
              .ThenBy(s => Int32.Parse(s.Split('#')[1]));
      

      结果:

      [
      "April#02",
      "Jan#1",
      "Jan#02",
      "Jan#03",
      "May#01"
      ]
      

      另一个答案将产生输出:

      [
      "April#02",
      "Jan#02",
      "Jan#03",
      "Jan#1",
      "May#01"
      ]
      

      我假设这是不正确的,因为 Jan#02 在 Jan#1 之前。

      您可以通过执行一次拆分并将这两个部分与原始字符串一起存储在匿名类中来提高我的代码效率,但我不想使代码复杂化。

      【讨论】:

      • 是的,谢谢伊恩,最后一件事我如何将所有月份作为逗号分隔的字符串作为最终字符串。
      • @Codehelp 您可以使用相同的Split 方法,以及Select 和string.Join
      猜你喜欢
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      相关资源
      最近更新 更多