c#对List进行排序<KeyValuePair <int,string >>

Cod*_*lus 15 c# sorting compare list keyvaluepair

在C#中,我想List<KeyValuePair<int, string>>按列表中每个字符串的长度排序.在Psuedo-Java中,这将是一个匿名的,看起来像:

  Collections.Sort(someList, new Comparator<KeyValuePair<int, string>>( {
      public int compare(KeyValuePair<int, string> s1, KeyValuePair<int, string> s2)
      {
          return (s1.Value.Length > s2.Value.Length) ? 1 : 0;    //specify my sorting criteria here
      }
    });
Run Code Online (Sandbox Code Playgroud)
  1. 我如何获得上述功能?

Guf*_*ffa 34

C#中的等价物是使用lambda表达式和Sort方法:

someList.Sort((x, y) => x.Value.Length.CompareTo(y.Value.Length));
Run Code Online (Sandbox Code Playgroud)

您也可以使用OrderBy扩展方法.它的代码略少,但它增加了更多的开销,因为它创建了列表的副本而不是将其排序到位:

someList = someList.OrderBy(x => x.Value.Length).ToList();
Run Code Online (Sandbox Code Playgroud)


Bru*_*oLM 11

您可以使用linq调用OrderBy

list.OrderBy(o => o.Value.Length);
Run Code Online (Sandbox Code Playgroud)

有关@Guffa指出的查找Linq和延迟执行的更多信息,基本上它只会在需要时执行.因此,要立即从此行返回一个列表,您需要添加一个.ToList()将使表达式返回列表的表达式.

  • 请注意,代码实际上并没有做任何工作.您必须使用`ToList`来实际进行排序,并将其分配回变量. (3认同)