c# - 使用 Distinct 删除列表中的重复项

标签 c#

我正在尝试从我正在使用的浏览器上的列表中删除重复的 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/

相关文章:

c# - DataGrid中的矩形,绑定(bind)矩形的宽度值

c# - 进程启动是否使用另一个线程?

c# - LINQ 到 SQL : Delete entity (by ID) with one query

C# - 委托(delegate) System.Func< >

javascript - C# 的 Jquery 效果

c# - MessagingCenter.Send 上的 System.Reflection.TargetInvocationException

c# - 覆盖 linq 属性 c#

c# - 如何在控制台应用程序 C# 中获取 server.Mappath

c# - Predicates 或 Actions 是否具有任何其他属性或特性以将它们与 Funcs 区分开来?

c# - 通用列表/字典