SORU
20 Mayıs 2010, PERŞEMBE


Bileşik Anahtar Sözlük

Listedeki bazı nesneler var, List<MyClass> diyelim ve Sınıfım çeşitli özellikler vardır. Sınıfım 3 özelliklerine göre listenin bir dizin oluşturmak istiyorum. Bu durumda Özellikleri 2, ve bir özellik bir datetime int.

Temelde gibi bir şey yapmak istiyorum:

Dictionary< CompositeKey , MyClass > MyClassListIndex = Dictionary< CompositeKey , MyClass >();
//Populate dictionary with items from the List<MyClass> MyClassList
MyClass aMyClass = Dicitonary[(keyTripletHere)];

Ben bazen tutar sınıfların farklı özellikleri dizin listesi birden fazla sözlükler oluşturmak. Bileşik anahtarları olsa işlemek için nasıl emin değilim. Üç değer sağlama düşündüm ama bu çarpışma riskini de taşır.

CEVAP
14 Mart 2012, ÇARŞAMBA


Dizilerini kullanmalısınız. CompositeKey bir derse eşdeğer, ama Equals() ve GetHashCode() zaten senin için uygulanır.

var myClassIndex = new Dictionary<Tuple<int, bool, string>, MyClass>();
//Populate dictionary with items from the List<MyClass> MyClassList
foreach (var myObj in myClassList)
    myClassIndex.Add(Tuple.Create(myObj.MyInt, myObj.MyBool, myObj.MyString), myObj);
MyClass myObj = myClassIndex[Tuple.Create(4, true, "t")];

Veya kullanma Sistemi.Seri

var myClassIndex = myClassList.ToDictionary(myObj => Tuple.Create(myObj.MyInt, myObj.MyBool, myObj.MyString));
MyClass myObj = myClassIndex[Tuple.Create(4, true, "t")];

Karma hesaplama özelleştirmek için ihtiyacınız yoksa, daha basit dizilerini kullanın.

Eğer orada bir sürü istediğim özellikler eklemek için bileşik anahtar, Demet tipi adı olabilir oldukça uzun, ama sen-ebilmek yapmak daha kısa bir ad oluşturarak kendi sınıf türetmek gelen Demet<...>.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amena

    Amena

    15 Kasım 2006
  • oHeymarvin

    oHeymarvin

    11 Temmuz 2013
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008