如何在list<>中找到重复的项目?

19 浏览
0 Comments

如何在list<>中找到重复的项目?

我有:

List list = new List() { "a", "a", "b", "b", "r", "t" };

我如何只获取"a"和"b"?

我试过这样做:

List list = new List() { "a", "a", "b", "b", "r", "t" };
List test_list = new List(); 
test_list = list.Distinct().ToList();

现在test_list里有{"a", "b", "r", "t"}

然后:

test_list = test_list.Except(list).ToList();

所以这是我的失败点,因为Except()删除了所有元素。

你能帮我找到解决方案吗?

0
0 Comments

问题的出现原因是有人提供了一个答案,但是其他人对答案的正确性表示怀疑,并提供了一个测试用例来验证答案的正确性。解决方法是其他人提供了一个更好的解决方案,并解释了为什么这个方案更好。

以下是整理后的

有人提供了一个解决方法,代码如下:

var duplicates = list.GroupBy(a => a).SelectMany(ab => ab.Skip(1).Take(1)).ToList();

但是有人对这个答案的正确性表示质疑,并提供了一个测试用例来验证答案的正确性:

{ "a", "a",  "b", "b", "a", "r", "t" }

有人表示这个解决方法并不可行,并提供了一个更好的解决方案,代码如下:

var duplicates = list.GroupBy(a => a).Where(g => g.Count() > 1).Select(g => g.Key).ToList();

他解释说这个方案更易读且更直接。有人对这个解决方案进行了验证,并确认它的正确性。

最后,有人提醒问题提出者如果这个解决方案最终是最好的解决方法,可以通过点击答案左边的浅色勾选标记来接受答案。

0
0 Comments

问题的原因是找到列表中的重复项。解决方法是使用HashSet和foreach循环来实现。

在给定的代码示例中,列表list包含了一些字符串元素。我们创建了两个HashSet实例,distinct和duplicates,用于存储不同的元素和重复的元素。然后,我们使用foreach循环迭代列表中的每个元素。

在循环中,我们首先尝试将当前元素添加到distinct HashSet中。如果添加成功,说明该元素是第一次出现,我们将其视为不同的元素,并继续下一个元素的检查。如果添加失败,说明该元素已经存在于distinct HashSet中,即重复出现的元素,我们将其添加到duplicates HashSet中。

最后,我们可以查看distinct HashSet和duplicates HashSet的内容,以获得不同元素和重复元素的列表。

这种方法非常高效,因为HashSet的添加操作具有O(1)的时间复杂度。这意味着在添加元素时,HashSet会自动检查是否已经存在相同的元素,并返回一个布尔值以指示添加是否成功。通过利用HashSet的这个特性,我们可以避免手动遍历列表来检查重复项。

此外,还提供了另一种更高效和懒惰的解决方案的链接。

0
0 Comments

如何在List<>中找到重复的项?

有时候我们需要在一个List<>中找到重复的项。在这种情况下,我们可以使用LINQ来轻松地找到重复的项。

在给定的代码示例中,我们有一个List<>,其中包含一些字符串项。我们想要找到重复的项。

为了解决这个问题,我们可以使用LINQ的GroupBy()函数来按照项对列表进行分组。然后,我们可以使用Where()函数来过滤掉只出现一次的项。最后,使用Select()函数来选择重复项的键。最后,我们可以将结果转换为List<>。

下面是解决这个问题的代码示例:

List<string> list = new List<string>() { "a", "a", "b", "b", "r", "t" };
var dups = list.GroupBy(x => x)
    .Where(x => x.Count() > 1)
    .Select(x => x.Key)
    .ToList();

在这个例子中,我们首先创建了一个List<>,其中包含一些字符串项。然后,我们使用GroupBy()函数将列表中的项按照其值进行分组。接下来,我们使用Where()函数来过滤掉只出现一次的项。然后,我们使用Select()函数来选择重复项的键。最后,我们将结果转换为List<>。

通过执行以上代码,我们将得到一个包含重复项的List<>。

总结起来,使用LINQ的GroupBy()、Where()和Select()函数可以很容易地在List<>中找到重复的项。这种方法使代码更加可读和易于理解。

0