【问题标题】:Find distinct elements from List<List<String>>从 List<List<String>> 中查找不同的元素
【发布时间】:2016-01-13 10:33:11
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以让Distinct 使用自定义IEqualityComparerList&lt;T&gt; 工作

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


【解决方案1】:

像这样使用GroupBy

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

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

【讨论】:

  • @AndriyHoren...是的,这应该删除 List&lt;List&lt;string&gt;&gt; 中重复的 List。试试看吧。
  • 对,因为您将选择组
【解决方案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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2015-12-13
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多