簡體   English   中英

刪除多次出現的重復項

[英]Removing duplicates that appear more than once

只是在 linq 上練習了一下,我正在做通常的刪除項目,這些項目只會重復多次,所以在下面的例子中我有。

字 1 字 2 字 1

它應該只打印出單詞 2 Here is a 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");
        }
    }       
}

它應該只打印出一次出現的 Word2 但它不是

您應該只按MyWords並僅過濾長度為 1 的組。然后您可以使用System.Linq.Enumerable.SelectMany將組展平為IEnumerable<Words> 由於您似乎想要一個列表,我們可以添加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

此處可能的選項可以是將MyWords屬性包裝成匿名類型(它們通過屬性值進行比較,而不是通過引用相等),然后 select 組計數等於1

var duplicatesRemoved = _words.GroupBy(x => new { x.MyWords })
    .Where(group => group.Count() == 1)
    .Select(group => group.Key).ToList();

foreach (var item in duplicatesRemoved)
{
    Console.Write("Words Left " + item.MyWords + "\r\n");
}

在您的代碼 group.Count group.Count() > 1條件中,意味着 select 組具有重復項,但實際上您需要相反。

另一種選擇是通過MyWords屬性對源列表進行分組,獲取計數等於 1 的組,然后 select 這些組中的第一項(因為在Where子句之后每個組中只有一個項)

var duplicatesRemoved = _words.GroupBy(x => x.MyWords)
    .Where(group => group.Count() == 1)
    .Select(group => group.First())
    .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM