【问题标题】:SortedList with value and simplified loops with lambda带有值的 SortedList 和带有 lambda 的简化循环
【发布时间】:2012-01-30 09:06:21
【问题描述】:

我这里有一段代码:

SortedList<char, int> alpha = new SortedList<char, int>();
List<string> A = new List<string>();
alpha.OrderByDescending(x => x.Value);
foreach (var a in alpha)
    A.Add(a.Key + ":" + a.Value);
  1. alpha.OrderByDescending(x =&gt; x.Value); 不按值排序,而是按键排序。我可以知道代码有什么问题吗?

  2. 我可以简化吗:

    foreach (var a in alpha) A.Add(a.Key + ":" + a.Value);

到一个 lambda 语句中?像

alpha.ForEach(x => A.Add(a.Key + ":" + a.Value));

【问题讨论】:

    标签: c# list lambda sortedlist


    【解决方案1】:

    语句alpha.OrderByDescending(x =&gt; x.Value); 无效... Linq 运算符是惰性的,直到您枚举它们的结果时才会执行它们。由于您没有使用 OrderByDescending 的结果,它只是创建了一个惰性序列,产生按值排序的 alpha 的项目,如果你列举了它... OrderByDescending 不对集合进行排序,它只是从集合中返回排序后的项目序列,而不修改集合本身。

    你应该这样做:

    foreach (var a in alpha.OrderByDescending(x => x.Value))
        A.Add(a.Key + ":" + a.Value);
    

    【讨论】:

    • 谢谢汤姆,但是
      var A= alpha.OrderByDescending(a =>a.Value) .Select (a =>a.Key+":"+a.Value) .ToList() ;
      很适合我
    【解决方案2】:

    这可能会有所帮助:

    SortedList<char, int> alpha = new SortedList<char, int>();
    alpha.Add('B',1);
    alpha.Add('A',2);
    alpha.Add('C',3);
    var A= alpha.OrderByDescending(a =>a.Value)
            .Select (a =>a.Key+":"+a.Value)
            .ToList();
    

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      相关资源
      最近更新 更多