c# - 如何使用 Linq 和 C# 迭代从字典返回的列表

标签 c# linq visual-studio list ienumerable

我需要迭代 Linq 从字典返回的列表。 但是,如果我使用 ToList(),它就会变成一个列表的列表。

Dictionary<Tuple<double, double>, List<Tuple<double, double>>> dict = new   Dictionary<Tuple<double,double>,List<Tuple<double,double>>>();
        Random rnd = new Random();
        for(int x =0; x < 3 ; ++x)
        {
             double a = rnd.NextDouble()*100;
             double b = rnd.NextDouble()*100;
             double c = Math.Ceiling(rnd.NextDouble()*100);
             double d = Math.Ceiling(rnd.NextDouble()*100);
             Tuple<double, double> tp = new Tuple<double, double>(c, d);
             List<Tuple<double, double>> ll = new List<Tuple<double,double>>();
             ll.Add(tp);
             c = Math.Ceiling(rnd.NextDouble() * 100);
             d = Math.Ceiling(rnd.NextDouble() * 100);
             tp = new Tuple<double, double>(c, d);
             ll.Add(tp);
             dict.Add(new Tuple<double, double>(a, b), ll);
        }

        var t = dict.Where(x => x.Key.Item1 == 50 || Math.Abs(x.Key.Item1 - 80) < 20).Select(x => x.Value);
        // if I used
        var t = dict.Where(x => x.Key.Item1 == 50 || Math.Abs(x.Key.Item1 - 80) < 20).Select(x => x.Value).ToList();
        // it became a list of list.
        foreach(var u in t)
        // here I cannot use u.item1 why? 
        // t is an Ienumerable of list<Tuple<double, double>>
        // if I used foreach(var u in t.Tolist())
        // it became a list of list.

如有任何帮助,我们将不胜感激。

最佳答案

不太确定你的数据结构,但你能做到吗:

var t = dict.Where(x => x.Key.Item1 == 50 || Math.Abs(x.Key.Item1 - 80) < 20)
            .SelectMany(x => x.Value)
            .ToList();

最终,如果您有嵌套的集合,SelectMany基本上将许多集合合并为一个。因此,对于每个字典的集合,它会将它们展平为一个,而不是返回 IEnumerable。对于每个元素,它将它们作为一个很好的集合返回:)

MSDN 上的示例非常好,并解释了对象的集合,每个对象都有自己的 List<T> .所以基本上当我们做 SelectMany它将众多的集合扁平化为一个我们可以Select来自。

其他资源

Difference Between Select and SelectMany

SelectMany on DotNetPerls

关于c# - 如何使用 Linq 和 C# 迭代从字典返回的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33203010/

相关文章:

C# linq lambda 连接和选择语法

c# - 创建图像列表框?

windows - 发现窗口和按钮等对象的 HWND 的程序

visual-studio - Visual Studio 对象浏览器忽略 XML 注释格式

c++ - 适用于 native Visual Studio 开发人员的有用加载项或插件

c# - 如何使用AutoFixture实现日期限制?

c# - 如何将 DataTable 从类传递到页面

c# - 如何编写其答案包含列表的 LINQ 查询?

c# - 某些专栏如何在linq & linq to NHibernate中使用Distinct

c# - 构建 Linq 通用查询