c# LINQ Distinct() 在多级列表上

本文关键字:多级 列表 LINQ Distinct | 更新日期: 2023-09-27 18:21:41

我有一个具有以下值的List<List<int>>

[1] = 1,2
[2] = 4,5,6
[3] = 1,3

我想做的是检索唯一值 => 1,2,3,4,5,6 的简单列表(第一个在原始列表中重复(。

如果是 1D 列表,我会使用

variable.Select(n=>n).Distinct();

但是当我尝试使用

variable.Select(n=>n.Select(x=>x)).Distinct();

我得到了 2D 列表(我猜有唯一值(。我该如何解决这个问题?谢谢

c# LINQ Distinct() 在多级列表上

你可以将

SelectManyDistinct一起使用

var uniqueList = list.SelectMany(x => x).Distinct().ToList();

SelectManyList<List<int>>拼成IEnumerable<int>Distinct消除重复项。

private static void Main()
{
    List<List<int>> xss = new List<List<int>>()
    {
        new List<int>() {1, 2},
        new List<int>() {4, 5, 6},
        new List<int>() {1, 3}
    };
    var xs = xss.SelectMany(x => x).Distinct();
    Console.WriteLine(string.Join(" ",xs));
}
如果你

想要一个不同的整体整数,你可以做SelectMany,但如果你想要distinc列表,你可以做这样的事情;

void Main()
{
    List<List<int>> xss = new List<List<int>>()
    {
        new List<int>() {1, 2},
        new List<int>() {1, 2},
        new List<int>() {1, 2},
        new List<int>() {4, 5, 6},
        new List<int>() {1, 3}
    };
    xss.Select (x => string.Join(",", x)).Distinct();
}