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

  • Engadget

    Engadget

    18 EYLÜL 2006
  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • krotoflik

    krotoflik

    26 ŞUBAT 2011