2010-10-27 22 views
10

Kullanıcının iki Kontrol Listesi kutusundaki değerleri seçmesi için birincil veri kapsayıcım olarak C# içinde Lookup sınıfını kullanıyorum.C# System.Linq.Lookup Sınıfı Değerleri Kaldırma ve Ekleme

Arama sınıfı, Dictionary> sınıfını kullanmaktan çok daha kolaydır, ancak arama sınıfına değer kaldırma ve ekleme yöntemleri bulamıyorum.

Nerede ve birliği kullanmayı düşündüm, ama doğru anlayamadım.

Şimdiden teşekkürler.

+0

Neden sen Arama uygulamasını kendi oluşturmak Yüklü:

public class MyClass { public string Key { get; set; } public string Value { get; set; } } //We have a fully populated set: var set = new List<MyClass>() //Populate this. var lookup = set.ToLookup(m => m.Key, m => m); //Remove the item where the key == "KEY"; //Now you can do something like that, modify to your taste. lookup = lookup .Where(l => !String.Equals(l.Key, "KEY")) //This just flattens the set - up to you how you want to accomplish this .SelectMany(l => l) .ToLookup(l => l.Key, l => l.Value); 

listesine ekleme için, böyle bir şey yapabilir? Bir Sözlüke dayandırmak, birkaç satırdan fazla kod almamalıdır. – leppie

+0

Burada leppie ile aynı fikirde. Arama sınıfı, yalnızca arama verileri için var, değiştirilmemelidir. Artı sözlük zaten kullanmak için çok zor değil, sadece bir sözlük üstüne bir sarıcı yazmak için güzel olabilir. –

+0

Arama, bir sözlük üzerinde gerçek aramaları yapmak için farklı bir mekanizmaya da sahiptir. Ancak bazı basit testlerle, ikisi de çok hızlı bir şekilde gerçekleştirirler. –

cevap

11

Ne yazık ki, Arama sınıfının oluşturulması .NET çerçevesinin iç kısmıdır. Aramanın oluşturulduğu yol, Arama sınıfındaki statik Fabrika Yöntemleri'dir. Bunlar şu şekildedir: Ancak, bu yöntemler bizim tarafımızdan değil, içseldir. Arama sınıfının öğeleri kaldırmanın herhangi bir yolu yoktur.

Eklemek ve kaldırmak bir yolu sürekli yeni ILookups oluşturmaktır. Örneğin - bir eleman nasıl silinir.

//We have a fully populated set: 
var set = new List<MyClass>() //Populate this. 
var lookup = set.ToLookup(m => m.Key, m => m); 

var item = new MyClass { Key = "KEY1", Value = "VALUE2" }; 

//Now let's "add" to the collection creating a new lookup 
lookup = lookup 
    .SelectMany(l => l) 
    .Concat(new[] { item }) 
    .ToLookup(l => l.Key, l => l.Value); 
+0

Çıkarma işleri, lütfen bana bildirir misiniz Arama listesine öğeler nasıl eklenir. Öğelerin iç listesine eklenmesi ve çıkarılması mümkün olduğunda lütfen bana bildirin. –

+0

sadece ekledi, ne düşündüğünüzü bana bildirin –

+0

It Çalışanlar, çok teşekkürler. İçsel listeden verileri çıkarmaya kadar, sürecin kolay olduğu sanırım, çünkü şimdi ToLookup metod çağrısından önce bir listeye sahibim. –

İlgili konular