我有一个元组列表:List<Tuple<string,string,string>>
当我运行程序时,我的列表具有以下内容:
List[0] : 'Cars','Bird','1.0';
List[1] : 'Plane','Flower','2.0';
List[2] : 'Cars','Bird','1.0';
List[3] : 'Plane','Flower','2.0';
我想在清单上的linq中建立一个分组,使其只有两行:
List[0] : 'Cars','Bird','1.0';
List[1] : 'Plane','Flower','2.0';
它们是相同的,所以我不需要重复。
我已经尝试了很多东西。我知道如何在列上进行分组。
但是在3个字符串的元组中,我不知道。
在测试期间,我有4行。我只想要两行即可。
答案 0 :(得分:1)
如果您确实有List<Tuple<string, string, string>>
,则可以只进行myList.Distinct()
。
var myList = new List<Tuple<string, string, string>> {
Tuple.Create("a", "b", "1"),
Tuple.Create("aa", "bb", "1"),
Tuple.Create("a", "b", "1"),
Tuple.Create("aa", "bb", "1")};
myList.Distinct().Dump();
答案 1 :(得分:0)
实际上,您不需要GroupBy
函数,但是需要Distinct
函数。
Tuples支持相等性检查,因此,要删除所有重复项,您可以编写:
var listWithoutDuplicates = myList.Distinct().ToList();
如果不是元组或实现IEquatable<T>通用接口的其他类型,则可能要使用DistinctBy
函数,因为它没有本机.NET实现,所以您可以阅读更多内容关于here。
答案 2 :(得分:0)
如果要按所有列分组,则可以仅使用Distinct扩展方法。
list.Distinct();
如果要按单个列分组:
List<Tuple<string, string, string>> list = new List<Tuple<string, string, string>>();
list.Add(Tuple.Create("Cars", "Bird", "1.0"));
list.Add(Tuple.Create("Plane", "Flower", "1.0"));
list.Add(Tuple.Create("Cars", "Bird", "2.0"));
list.Add(Tuple.Create("Plane", "Flower", "2.0"));
foreach (var group in list.GroupBy(tuple => tuple.Item1))
{
Console.WriteLine(group.Key);
foreach (var tuple in group)
{
Console.WriteLine(" " + tuple);
}
}
结果是:
Cars
(Cars, Bird, 1.0)
(Cars, Bird, 2.0)
Plane
(Plane, Flower, 1.0)
(Plane, Flower, 2.0)
答案 3 :(得分:0)
您可以按商品1,商品2和商品3分组
var myList = new List<Tuple<string, string, string>> {
Tuple.Create("a", "b", "1"),
Tuple.Create("aa", "bb", "1"),
Tuple.Create("a", "b", "1"),
Tuple.Create("aa", "bb", "1")};
var result = myList.GroupBy(x => new { x.Item1, x.Item2,x.Item3})