对IEnumerable <string>进行排序

时间:2017-07-25 10:02:25

标签: c# .net

我的IEnumerable<string>值为:

  • PP
  • pp.10.0
  • pp.6.0
  • pp.6.1
  • pp.8.3
  • kp.10.1
  • KP
  • kp.3.20

...等

我想按字母顺序对它们进行组织,但要保留两位数字(例如上面的10.0和10.1的数字)低于单位数的值。换句话说,排序后应该如下所示:

  • KP
  • kp.3.20
  • kp.10.1
  • PP
  • pp.6.0
  • pp.6.1
  • pp.8.3
  • pp.10.0

我尝试了一个简单的IEnumerable<string>.OrderBy(x => x, StringComparer.CurrentCultureIgnoreCase),但在这种情况下,这并不是很有效。

另外请注意,ppkp部分可以在其中包含点,如果您正在考虑拆分字符串。

1 个答案:

答案 0 :(得分:4)

只需创建自己的比较器并将其传递给OrderBy的重载:https://msdn.microsoft.com/de-de/library/bb549422(v=vs.110).aspx

例如:

IEnumerable<string>.OrderBy(x => x, new MyComparer());

您自己的比较器可以是实现接口MyComparer的类(在上面的示例中,我将其命名为System.Collections.Generic.IComparer<string>)。将比较逻辑放入方法Compare

class MyComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        // your logic here
    }
}

// ...

IEnumerable<string> myListOfStrings = ...;

myListOfStrings.OrderBy(x => x, new MyComparer());