[英]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
集合。
其他资源
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.