簡體   English   中英

如何使用Linq和C#迭代從Dictionary返回的列表

[英]How to iterate a list returned from a Dictionary using Linq and C#

我需要迭代Linq從Dictionary返回的列表。 但是,如果我使用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基本上SelectMany許多集合折疊為一個。 因此,對於每個Dictionary的集合,它會將它們展平為一個,這樣就不會為每個元素返回IEnumerable ,而是將它們作為一個不錯的集合返回:)

MSDN上的示例非常不錯,並說明了如何收集對象,每個對象都有自己的List<T> 因此,基本上,當我們執行SelectMany它會將眾多集合SelectMany為一個可以Select集合。

其他資源

Select和SelectMany之間的區別

DotNetPerls上的SelectMany

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM