首页 > 解决方案 > C# - 查找特定值是否在列表中具有重复项

问题描述

我有一个用例,给定一个巨大的字符串列表和一个从DataGridView包含相同顺序的相同元素的行中提取的特定字符串值,我需要查找该列表是否包含另一个相同的条目。我检查的所有现有帖子只是告诉你是否有重复的时期。这是我到目前为止所拥有的:

List<int> indexes = new List<int>{-1, originalRow.Index};

int foundIndex = CompleteScancodeList.IndexOf(originalRow.Cells[1].Value.ToString());

if (!indexes.Contains(foundIndex))
{
    //Do something
}

originalRow变量是DataGridViewRow从遍历 a 的每一行中提取的a DataGridView。我在这里实际上是在说:如果列表中该元素的索引不是-1,并且与行的索引不同(因此实际上是相同的元素)。

我最初设法使它与嵌套循环一起工作,但它对我来说太慢了。如果给定的字符串值存在于字符串列表中但与原始索引不同,我如何才能按照我想要的方式进行这项工作?

这可行,有点...仅当重复元素在列表中的原始元素之前时才有效。同样,如果我使用该LastIndexOf方法,它仅在重复元素之后才有效。

标签: c#listduplicates

解决方案


我来自电话,抱歉格式和拼写错误。因此,判断列表是否有重复项:

if (list.Count != list.Distinct().Count) { // list has dupes }

查找特定的重复项并处理它们:

var set = new HasSet<int>();
foreach (var item in list) {
    if (!set.Add(item)) {
        // handle it
    }
}

如果您需要数组中的实际索引,您可以将 foreach 替换为 for 循环。


推荐阅读