在由tuple <string,string,string>组成的列表上是Distinct或GroupBy

时间:2019-07-17 13:26:28

标签: c# .net list linq

我有一个元组列表: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行。我只想要两行即可。

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();   

enter image description here

答案 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})