gpt4 book ai didi

c# - Distinct() 如何在对象列表中查找唯一元素

转载 作者:行者123 更新时间:2023-11-30 19:38:50 25 4
gpt4 key购买 nike

有一个非常简单的类:

public class LinkInformation
{
public LinkInformation(string link, string text, string group)
{
this.Link = link;
this.Text = text;
this.Group = group;
}

public string Link { get; set; }
public string Text { get; set; }
public string Group { get; set; }

public override string ToString()
{
return Link.PadRight(70) + Text.PadRight(40) + Group;
}
}

然后我创建了这个类的对象列表,其中包含多个重复项。

因此,我尝试使用 Distinct() 来获取唯一值列表。

但是不行,所以我实现了

IComparable<LinkInformation>

int IComparable<LinkInformation>.CompareTo(LinkInformation other)
{
return this.ToString().CompareTo(other.ToString());
}

然后……

IEqualityComparer<LinkInformation>

public bool Equals(LinkInformation x, LinkInformation y)
{
return x.ToString().CompareTo(y.ToString()) == 0;
}

public int GetHashCode(LinkInformation obj)
{
int hash = 17;
// Suitable nullity checks etc, of course :)
hash = hash * 23 + obj.Link.GetHashCode();
hash = hash * 23 + obj.Text.GetHashCode();
hash = hash * 23 + obj.Group.GetHashCode();
return hash;
}

使用 Distinct 的代码是:

    static void Main(string[] args)
{
string[] filePath = { @"C:\temp\html\1.html",
@"C:\temp\html\2.html",
@"C:\temp\html\3.html",
@"C:\temp\html\4.html",
@"C:\temp\html\5.html"};

int index = 0;

foreach (var path in filePath)
{
var parser = new HtmlParser();

var list = parser.Parse(path);

var unique = list.Distinct();

foreach (var elem in unique)
{
var full = new FileInfo(path).Name;
var file = full.Substring(0, full.Length - 5);
Console.WriteLine((++index).ToString().PadRight(5) + file.PadRight(20) + elem);
}
}

Console.ReadKey();
}

要使 Distinct() 正常工作必须做什么?

最佳答案

您需要在调用时实际将您创建的 IEqualityComparer 传递给 Disctinct。它有两个重载,一个不接受任何参数,一个接受 IEqualityComparer。如果您不提供比较器,则使用默认比较器,并且默认比较器不会按照您希望比较的方式比较对象。

关于c# - Distinct() 如何在对象列表中查找唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30877180/

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