【问题标题】:Output a list/other data structure using linq query使用 linq 查询输出列表/其他数据结构
【发布时间】:2011-07-07 05:39:50
【问题描述】:

有没有办法在通用集合上执行 Console.WriteLine() 例子: 列出一个有:

a.Key[0]: apple
a.Value[0]: 1

a.Key[1]: bold
a.Value[2]: 2

有没有办法使用 LINQ 写出 List 内容:Key、Value?

a = a.OrderByDescending(x => x.Value));

foreach (KeyValuePair pair in car) 
{ 
    Console.WriteLine(pair.Key + ' : ' + pair.Value); 
} 

我想写一个 Linq / 查询而不是 foreach... 可能吗?

【问题讨论】:

  • 如果知道的话,性能有什么不同吗?我主要使用字典(而不是上面显示的列表)进行查找,但是为了循环执行 Console.WriteLine LINQ 查询是否比直接使用的列表或字典(如果知道)更快?谢谢

标签: c# list dictionary map linq-to-objects


【解决方案1】:

如果你仔细想想,你并不是真的在询问。查询本质上是询问有关数据的问题,然后以特定方式安排答案。但是,您对该答案的处理与实际生成它是分开的。

在您的情况下,查询的“问题”部分是“我的数据是什么?” (因为您没有应用 Where 子句,)并且“排列”部分是“根据每个项目的值降序排列”。你会得到一个IEnumerable<T>,它在被枚举时会吐出你的“答案”。

此时,您实际上需要对答案做一些事情,因此您使用foreach 循环枚举它,然后对每个项目执行您需要的任何操作(就像您在问题中所做的那样。)我认为这个是一种完全合理的方法,可以清楚地说明发生了什么。

如果您绝对必须使用 LINQ 查询,您可以这样做:

a.OrderByDescending(x => x.Value).ToList().ForEach(x => { Console.WriteLine(x.Key + ' : ' + x.Value); });

编辑:这个blog post 有更多。

【讨论】:

    【解决方案2】:

    有一个扩展方法本身循环值:

     myList.ForEach(a => {
          // You have access to each element here, but if you try to debug, this is only one function and won't be iterated in debug mode.
     });
    

    您也可以使用链接的聚合函数将字符串连接在一起:

     Console.WriteLine(myList.Aggregate((a, b) => string.Format("{0}, {1}", a, b)));
    

    【讨论】:

    • 这不适用于问题中显示的代码,因为aIEnumerable<T>ForEach()List<T> 的成员。
    【解决方案3】:

    您可以使用 LINQ 构造字符串,然后将其输出到控制台 示例:

    var s=string.Join(Environment.NewLine, a.Select(x=>string.Format("{0}:{1}",x.Key,x.Value)).ToArray());
    Console.WriteLine(s);
    

    【讨论】:

    • 一开始我以为“到底谁会为了输出到控制台而做​​这样的事情”?但后来我意识到,如果您使用 Linq,那么您可以轻松地通过 x.Key 对列表进行排序(并在列表中进行过滤)——如果使用 foreach 循环,这将不是那么容易。
    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多