Genellikle, C#'da Distinct'ı dizi deduplication için kullanırız, genel dizi tabanlı veri türleri, örneğin int, string. ayrıca nesne deduplication için de kullanılabilir, C#'ın Distinct yöntemi tanımına bir göz atalım:
Ağır bir yük var, ilk parametre eklenir, bu genişletme yöntemi, genişletme yöntemi hakkında lütfen Baidu'yu anla. Distinct'ın nesne deduplication'unu inceleyelim, diyelim ki artık bir People sınıfımız var:
ListPeole nesnelerinden oluşan bir koleksiyon ilan ediyoruz:
ListPeople üzerinde herhangi bir parametre olmadan Distinct yöntemini kullanalım ve sonuç şu şekildedir:
Farklı yöntemin parametreleri yoksa nesne kümesinde p, p1, p2'nin deduplicate edileceği ve nesnenin aynı üye değerine sahip farklı nesneler için deduplication olmadığı görülebilir. Şimdi bir gereksinimimiz var, aynı ID'ye sahip İnsanlar için, aynı kişi olarak sayıyoruz, kümedeki çoğaltmayan kişileri çıkarmak için (aynı ID için sadece bir tane çıktı), bu zaman ikinci yöntem olan Distinct kullanıyoruz, bu yöntem verilen parametrelerin IEqualityComparer türünde olmasını gerektirir, genel bir arayüz devralır, aşağıdaki kodu ekleriz:
IEqualityComparer arayüzünü devralarak, Equals ve GetHashCode metodlarını uygulamalısınız. Karşılaştırdığımızda, PeopleCompareByID ile bir varlık iletebiliriz:
Koşuya çıkan sonuçlar şu şekildedir:
Kimlik ile deduplication etkisini elde ettik. Şimdi gereksinimler tekrar değişti, ID ve eyalet aynı kişi, kişinin bilgisini çıkarmak için (aynı kişi istediği zaman bir veri çıkarabilir), bu sırada ID=0 ve Province="Hubei" tekrarlandığını görüyoruz, deduplicate etmek için başka bir sınıfımız var ya da IEqualityComparer'dan miras alıyoruz:
Benzer şekilde, Distinct yöntemi kullanılırken, PeopleCompareByIDAndProvince örneği geçer:
Koşu sonrası sonuçlar şunlardır:
İstediğimiz etkiyi elde ettik. Bu yöntem, üç veya daha fazla nesne üyesiyle deduplication sorunu karşılaşıldığında kullanılarak nesnenin çoğaltıp çoğaltılmadığını belirlemek için kullanılabilir. Yukarıdaki benim mütevazı görüşüm.
|