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

  • Gali B

    Gali B

    1 EYLÜL 2006
  • Roger Huffman

    Roger Huffma

    4 ŞUBAT 2007
  • Skittles Page

    Skittles Pag

    28 Mart 2011