我正在尝试从我正在使用的浏览器上的列表中删除重复的 ID。该列表被转换为数组,然后添加到富文本框。这是我正在使用的通用书签系统所必需的。问题是它会删除重复项。即使在我将 distinct 添加到代码之后。
string html = WebsCon2.ExecuteJavascriptWithResult("document.getElementsByTagName('html')[0].innerHTML");
var htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.LoadHtml(html); var playerIds = new List<string>();
var playerNodes = htmlDoc.DocumentNode.SelectNodes("//a[contains(@href, '/link/profile-view.jsp?user=')]").Distinct();
foreach (var playerNode in playerNodes)
{
string href = playerNode.Attributes["href"].Value;
var parts = href.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length > 1)
{
playerIds.Add(parts[1]);
}
string Target = string.Join("", playerIds.ToArray());
PlayerID.Text = Target;
}
那么有没有其他方法可以删除重复项?
最佳答案
问题是 Distinct
不会根据内容比较您的节点。它通过引用比较它们。如果你想要 InnerText
不同的节点,你可以使用:
var playerNodes = htmlDoc.DocumentNode
.SelectNodes("//a[contains(@href, '/link/profile-view.jsp?user=')]")
.GroupBy(node => node.InnerText)
.Select(g => g.First());
或者您可以使用 DistinctBy
MoreLINQ
中的方法:
var playerNodes = htmlDoc.DocumentNode
.SelectNodes("//a[contains(@href, '/link/profile-view.jsp?user=')]")
.DistinctBy(node => node.InnerText);
关于c# - 使用 Distinct 删除列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27575409/