SORU
28 Ocak 2009, ÇARŞAMBA


Seri belirli bir Özelliğin Farklı

Ben oynarken Etmeniz öğrenmek ile ilgili ama çözemedim nasıl kullanılacağını Farklı zaman değilim basit bir liste (basit bir liste tamsayılar oldukça kolay, bu değil soru). Eğer nesnenin BİR veya DAHA fazla Özellikleri bir Nesne listesi Distinct kullanmak için ne yapmalıyım?

Eğer bir nesne Özelliği Id Person,. örnek: Nasıl tüm Kişi ve özelliği ile Distinct nesne Id miyim?

Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"

Nasıl Person1 ve Person3 alabilir miyim? Bu mümkün mü?

Eğer Etmeniz ile mümkün değilse, ne Person listesi bazı Özelliklerini bağlı olarak, en iyi yolu olurdu .Net 3.5?

CEVAP
28 Ocak 2009, ÇARŞAMBA


EDİTBu şimdi MoreLINQ parçası.

İhtiyacın olan şey "farklı" etkili olur. Bunu yazmak kolay olsa da: anlamı olarak SERİ bir parçası olduğuna inanmıyorum

public static IEnumerable<TSource> DistinctBy<TSource, TKey>
    (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
    HashSet<TKey> seenKeys = new HashSet<TKey>();
    foreach (TSource element in source)
    {
        if (seenKeys.Add(keySelector(element)))
        {
            yield return element;
        }
    }
}

Çok farklı değerleri Id sadece özelliğini kullanarak bulmak için kullanabilirsiniz:

var query = people.DistinctBy(p => p.Id);

Ve birden fazla özelliklerini kullanmak için, eşitlik uygun şekilde uygulamak anonim türleri kullanabilirsiniz:

var query = people.DistinctBy(p => new { p.Id, p.Name });

Denenmemiş, ama çalışması gerekir (ve şimdi en azından derler).

Eğer bir eşitlik karşılaştırıcısı geçişte, sadece HashSet kurucu devretmek istiyorsanız anahtarları için varsayılan karşılaştırıcısı olsa varsayar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • akalyne

    akalyne

    13 Mayıs 2009
  • MugenPowerBatteries

    MugenPowerBa

    8 EKİM 2010
  • SketchBookPro

    SketchBookPr

    6 Mayıs 2009