删除多次出现的重复项

rog*_*nin 1 c# linq list

只是在 linq 上练习了一下,我正在执行通常的删除仅重复多次的项目,所以在下面的示例中我有。

字1 字2 字1

它应该只打印出单词 2 这是一个https://dotnetfiddle.net/P47DGT是他们用 lambda 更好地做到这一点的简单方法。

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");
        }
    }       
}
Run Code Online (Sandbox Code Playgroud)

它应该只打印出一次出现的 Word2 但它不是

Roa*_*ner 5

您应该只分组MyWords并仅过滤长度为 1 的组。然后您可以将组展平IEnumerable<Words>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");
}
Run Code Online (Sandbox Code Playgroud)

哪个输出:

Words Left word2
Run Code Online (Sandbox Code Playgroud)