gpt4 book ai didi

c# - 从 C# 中的 List 或 HashSet 中删除重复项

转载 作者:行者123 更新时间:2023-12-02 22:06:29 30 4
gpt4 key购买 nike

我有一个非常简单的测试方法,它返回一个包含多个重复项的列表,但如果没有,我想我会尝试 HashSet,因为它应该删除重复项,但看来我需要重写 Equals 和 GetHashCode但我真的很难理解我需要做什么。请给我一些建议。

HashSet<object> test = XmlManager.PeriodHashSet(Server.MapPath("../Xml/XmlFile.xml"));
foreach (Object period in test2)
{
PeriodData pd = period as PeriodData;
Response.Write(pd.PeriodName + "<br>");
}

我也试过下面的

List<object> test = XmlManager.PeriodList(Server.MapPath("../Xml/XmlFile.xml"));
List<object> test2 = test.Distinct().ToList();
foreach (Object period in test2)
{
PeriodData pd = period as PeriodData;
Response.Write(pd.PeriodName + "<br>");
}

PeriodData 对象的 delcarewd 如下:

public class PeriodData
{
private int m_StartYear = -9999999;
private int m_EndYear = -9999999;
private string m_PeriodName = String.Empty;

public int StartYear
{
get { return m_StartYear; }
set { m_StartYear = value; }
}
public int EndYear
{
get { return m_EndYear; }
set { m_EndYear = value; }
}
public string PeriodName
{
get { return m_PeriodName; }
set { m_PeriodName = value; }
}
}

这是我要删除重复项的返回的 PeriodName。

最佳答案

对于 HashSet<T>要工作,您至少需要覆盖 Object.EqualsObject.GetHashCode .这使得哈希算法能够知道是什么让两个对象在值上“不同”或相同。

在简化和改进代码方面,我建议进行两项主要更改以实现此目的:

首先,您应该使用 HashSet<PeriodData> (或 List<PeriodData> ),而不是 HashSet<object> .

其次,你的PeriodData类应该实现 IEquatable<PeriodData> 为了提供适当的散列和平等。

关于c# - 从 C# 中的 List 或 HashSet 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16043288/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com