c# - 删除多次出现的重复项
问题描述
只是在 linq 上练习了一下,我正在做通常的删除项目,这些项目只会重复一次以上,所以在下面的例子中我有。
字 1 字 2 字 1
它应该只打印出单词 2 这是一个https://dotnetfiddle.net/P47DGT是他们更好地使用 Lambada 的一种简单方法。
class Words {
public string MyWords { get; set; }
}
public class Program
{
public static void Main()
{
List<Words> _words = new List<Words>();
_words.Add(new Words() { MyWords = "word1" });
_words.Add(new Words() { MyWords = "word2" });
_words.Add(new Words() { MyWords = "word1" });
RemoveDuplicatesLinq(_words);
}
static void RemoveDuplicatesLinq(List<Words> _words) {
List<Words> duplicatesRemoved = new List<Words>();
duplicatesRemoved = _words.GroupBy(x => x)
.Where(group => group.Count() > 1)
.Select(group => group.Key).ToList();
foreach (var item in duplicatesRemoved) {
Console.Write("Words Left " + item.MyWords + "\r\n");
}
}
}
它应该只打印出一次出现的 Word2 但它不是
解决方案
您应该只分组MyWords
并仅过滤长度为 1 的组。然后您可以将组展平为IEnumerable<Words>
with System.Linq.Enumerable.SelectMany
。由于您似乎想要一个列表,我们可以添加ToList()
以将结果转换为List<Words>
.
List<Words> duplicatesRemoved = _words
.GroupBy(x => x.MyWords)
.Where(group => group.Count() == 1)
.SelectMany(group => group)
.ToList();
foreach (var item in duplicatesRemoved)
{
Console.Write("Words Left " + item.MyWords + "\r\n");
}
哪些输出:
Words Left word2
推荐阅读
- mac-catalyst - 如何在 macOS 11 中计算 Mac Catalyst 中的实际窗口大小
- excel - 输入总分钟数时,如何让excel以小时和分钟为单位输出持续时间?
- c# - CheckedChanged 未触发
- react-native - React Native滚动视图在android中不起作用
- angular - 如何将 FirebaseUI 正确配置到我的 Angular 项目中?
- excel - Copy columns from one csv file to another using PowerShell
- python - TypeError:“ValueError”类型的参数在 python 的 qpsolvers 中不可迭代
- heroku - Heroku 上 bot 的奇怪问题
- javascript - Java Scrip For Loop 条件问题
- javascript - 为什么在有条件的 innerHTML 之后我的功能不起作用?