【问题标题】:Remove duplicate objects from a list using LINQ in c# [duplicate]在 C# 中使用 LINQ 从列表中删除重复对象 [重复]
【发布时间】:2014-05-03 07:18:30
【问题描述】:

这里我有一个Column 对象的列表。每个Column 对象都有几个属性,这些属性可能是唯一的,也可能不是。这是我到目前为止编写的示例代码。如何从columns 列表中删除重复项,以便在最终列表中只有 c1 和 c2?

Program.cs

var pc1 = new PartialColumn { Section = "C50" };
var pc2 = new PartialColumn { Section = "C40" };

var c1 = new Column
{
    X = 0,
    Y = 0,
    StartElevation = 0,
    EndElevation = 310,
    FoundationHeight = 60,
    ListOfPartialColumns = new List<PartialColumn> {pc1}
};

var c2 = new Column
{
    X = 600,
    Y = 0,
    StartElevation = 0,
    EndElevation = 630,
    FoundationHeight = 60,
    ListOfPartialColumns = new List<PartialColumn> { pc1, pc2 }
};

var c3 = new Column
{
    X = 600,
    Y = 0,
    StartElevation = 0,
    EndElevation = 630,
    FoundationHeight = 60,
    ListOfPartialColumns = new List<PartialColumn> { pc1, pc2 }
};

var columns = new List<Column> {c1, c2, c3};

PartialColumn.cs

public class PartialColumn
{
    public string Section { get; set; }
}

Column.cs

public class Column
{
    public double StartElevation { get; set; }
    public double EndElevation { get; set; }
    public double X { get; set; }
    public double Y { get; set; }
    public List<PartialColumn> ListOfPartialColumns { get; set; }
    public double FoundationHeight { get; set; }
}

更新:

我想从列列表中删除重复项。如您所见,c2 和 c3 具有相同的属性。我想删除 c3。

【问题讨论】:

  • 你应该根据你想要对这些对象进行分组来说明。实际上,通过对项目进行分组,您不会减少元素数量。事实并非如此。您应该使用where 过滤某些项目。
  • @TolgaEvcimen 我更新了问题。
  • @CameronMacFarland 问题是我有另一个 List 作为我的 Column 类的属性,这让我感到困惑。

标签: c# linq list


【解决方案1】:

您的问题How can I group ... 似乎很奇怪。看来你想How can I select ...。接下来我会问你想如何分组/选择只得到c1c2。 c1 和 c2 没有共同的属性,而 c3 则没有。

如果你想得到 c2 和 c3,那就试试吧:

columns
   .Where(c => c.EndElevation == 630)

更新问题的答案

很久以前,Remove duplicates in the list using linq 已经回答了获取不同值的标准方法。

您需要做的是为Column 类添加一个比较器,然后尝试:

var distinctColumns = columns
   .Distinct(new ColumnComparer()); 

【讨论】:

  • 我想从columns 列表中删除重复项。如您所见,c2 和 c3 具有相同的属性。我想删除 c3。
  • 我是否也应该为 Column 类覆盖 GetHashCode()` 和 Equals()
  • 这是另一种方法。通过使用特定的比较器,您可以避免这种头痛。
  • 谢谢理查德,请看我的另一个问题我已经用完整的代码更好地解释了自己。不幸的是,我的问题被忽略并标记为重复而没有仔细观察。 stackoverflow.com/questions/23442831/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 2020-03-30
  • 2015-08-02
相关资源
最近更新 更多