从List <list <string>&gt;中查找不同的元素

时间:2016-01-13 10:33:12

标签: c# asp.net-mvc linq list asp.net-mvc-5

我想根据内部列表的值找到嵌套列表中的不同元素。

当前列表结构:下图显示了一个表,其中每一行都是一个字符串列表,整个表是使用字符串列表列表生成的

Table

var eachrow = new List<String>();
var allrow = new List<List<String>>();

//eachrow is populated from db. After a complete row is populated it is added to allrow

//Sample
//eachrow[0] = "no value"
//eachrow[1] = "67" and so on
//allrow[0] = {no value,67,89,0,0,0,67,34}
//allrow[1] = {no value,201,45,102,0,0,47,12} and so on

现在我想消除表中的重复行。我不是在寻找Javascript的解决方案。生成HTML表仅用于显示问题。

我尝试了什么

allrow = allrow.Distinct().ToList();
//Doesnt remove duplicates

2 个答案:

答案 0 :(得分:4)

像这样使用GroupBy

var result = allrow.GroupBy(c => String.Join(",", c))
                                .Select(c => c.First().ToList()).ToList();

此外,您可以实现EqualityComparer类并在LINQ的Distinct方法中使用它。但我认为,正如我所提到的那样,GroupBy用于此目的会更简单。

答案 1 :(得分:2)

好的,这里是@ S.Akbari的类似解决方案,应该可以帮助您了解基于LINQ的解决方案是如何工作的。

var rowMap = new Dictionary<string, List<string>>();

foreach (var row in allrow)
{
    string key = string.Join(",", row);

    if (rowMap.ContainsKey(key) == false)
    {
        rowMap.Add(key, row);
    }
}

var result = rowMap.Values.ToList();