c# - 查找是否多次包含相同元素的字符串列表

标签 c# wpf list element contains

我正在为产品销售网站编写自己的特定网络爬虫。由于它们非常糟糕的编码性质,我得到了指向同一页面的 url。

例子一

http://www.hizlial.com/bilgisayar/bilgisayar-bilesenleri/bilgisayar/yazicilar/samsung-scx-3200-tarayici-fotokopi-lazer-yazici_30.033.1271.0043.htm

例如上面的页面和下面的一样

http://www.hizlial.com/bilgisayar-bilesenleri/bilgisayar/yazicilar/samsung-scx-3200-tarayici-fotokopi-lazer-yazici_30.033.1271.0043.htm

如您所见,当您通过 '/' 字符拆分时,它包含 2 个“bilgisayar”元素

所以我想要的是像这样拆分 url

 string[] lstSPlit = srURL.Split('/');

之后检查该列表是否多次包含相同的元素。任何元素。如果包含任何元素,我将跳过 url,因为我已经从其他页面中提取了真实的 url。那么这样做的最佳方法是什么?

更长但有效的版本

string[] lstSPlit = srHref.Split('/');
bool blDoNotAdd = false;
HashSet<string> splitHashSet=new HashSet<string>();
foreach (var vrLstValue in lstSPlit)
{
    if (vrLstValue.Length > 1)
    {
        if (splitHashSet.Contains(vrLstValue) == false)
        {
            splitHashSet.Add(vrLstValue);
        }
        else
        {
            blDoNotAdd = true;
            break;
        }
    }
}

最佳答案

if (list.Distinct().Count() < list.Count)

这应该比分组更快。 (我没测过)

您可以通过编写自己的扩展方法将项目添加到 HashSet<T> 来使其更快如果 Add() 则立即返回 false返回假。

你甚至可以使用邪恶的速记来做到这一点:

if (!list.All(new HashSet<string>().Add))

关于c# - 查找是否多次包含相同元素的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122081/

相关文章:

c# - 选择字体大小以使字符串适合宽度

c# - 如何将 ViewModel 中的信息转换为显示在 View 中

python - 在 Python 中使用列表运行减法

c# - 用 c# .NET 4 vs2010 编写的 Windows 服务不会安装在 Server 2008 R2 Enterprise 上

c# - 如何选择最合适的异常类型来抛出?

c# - Unity 容器调用非默认 ctor

.net - 如何检查计算机上安装的 .NET 版本

python - 删除重复项而不创建新列表

python - 将逗号分隔的浮点字符串转换为列表?

c# - 拒绝用户访问 MySql - 无法创建软件正在寻找的用户