我不太确定如何解释这个问题
我有一些事情:
0 1 A
2 3 A
1 1 A
0 1 B
2 5 B
我想要这样的一套:
A,[{0,1},{2,3},{1,1}]
B,[{0,1},{2,5}]
答案 0 :(得分:0)
您尚未提供有关数据结构的任何信息,因此我将在此处使用元组。要实现您的目标,您可以使用LINQ ToLookup
:
var data = new[] {
Tuple.Create(0, 1, "A"),
Tuple.Create(2, 3, "A"),
Tuple.Create(1, 1, "A"),
Tuple.Create(0, 1, "B"),
Tuple.Create(2, 5, "B")
};
var result = data.ToLookup(
tuple => tuple.Item3,
tuple => Tuple.Create(tuple.Item1, tuple.Item2)
);
您可以打印查找表:
foreach (var grouping in result)
Console.WriteLine(
"{0}: {1}",
grouping.Key,
String.Join(", ", grouping.Select(tuple => tuple.ToString()))
);
输出结果为:
A: (0, 1), (2, 3), (1, 1) B: (0, 1), (2, 5)
您可以使用GroupBy
而不是ToLookup
。不同之处在于,一旦计算出查找表,它就存储在内存中。如果您使用GroupBy
,则每次使用foreach
迭代结果时都会执行分组。此外,如果您的数据源自支持LINQ的数据源(如实体框架),则使用GroupBy
允许在服务器端执行分组,这可能会提高性能。