2013-04-08 17 views
8

ormanı göremiyorsun: Benim matematiksel programı aracılığıyla yinelemek öğeler dev koleksiyon sahip olacaktır. Temel olarak, bir ürün ve bir işaretçisi işaretçisinden bir başka öğe ((int) öğe, (int) işaretçisine), bir anahtar değer çiftini andırır. Ancak, kendi başına her öğe olacak birkaç böyle niteliklerini diğer:HashSet, sözlük, ArrayList: ağaçlar Hakkında

(öğe, işaretçi), (nitelik, özellik, nitelik, ...)

Öğeler, göstericiler ve nitelikleri olacak sık eklendi.

Bu siteyi ve diğerlerini araştırmak, program için hangi koleksiyonun kullanılacağı konusunda daha fazla bilgi sahibi olmamı sağladı.

Dictionary<Dictionary<int,int>,Dictionary<int,int> nestedDictionary = 
    new Dictionary<Dictionary<int,int>,Dictionary<int,int> nestedDictionary(); 

veya sade bir dille:

Dictionary<Dictionary<item, pointer>, 
      Dictionary<attribute,attribute, ...> nestedDictionary =  
    Dictionary<Dictionary<item, pointer>, 
       Dictionary<attribute,attribute, ...>(); 

niteliklerin sayı değil lütfen unutmayın vcskicks.com bulunan bir Sözlük çözüm iyi iş gibi görünüyor bu noktada

önceden tanımlanmış, uzunluk olarak değişir. Ayrıca şu anda performans yükü nedeniyle nesneler kullanmakta isteksizim.

Hashsets uymuyor çünkü yinelenen öğeler mevcut olacak, ancak farklı öznitelikleri olacak. Veya hashset'in yinelenen öğeleri var, ancak yalnızca hashkey'leri kopyalamıyor musunuz? Bazı karışıklıklar var gibi görünüyor.

Bazılarına göre aşağıdaki HashSet hesaplamak olmaz:

11011, 0001 
11011, 0011 

o olacak başkalarına göre, bu farklı bir hashkey olacaktır çünkü. Beni şaşırttı.

Sorum: Hangi kullanmak en koleksiyon türüdür: belirsiz olmanın riskini göze alarak

? Gerekirse hikayeye daha fazla katkıda bulunmaktan mutluluk duyarım.

Düzenlemeleri:

Dev şu anlama gelir: öğelerin potansiyel milyonlarca. Tüm öğelerin bir işaretçisi ve nitelikleri olacaktır. Genel kullanım arama, belirli bir öğe için işaretçi alma, bir sonraki işaretçinin öğeyi, işaretçi kalmayıncaya kadar alır. Aynı zamanda, her bir öğe için tüm özellikler toplanır. Ekleme düzenli aralıklarla, sadece ara sıra kaldırılarak yapılacaktır. İşaretçi: işaretçi, başvurduğu öğenin bir dizinidir. 2 öğeniz varsa ve ilki ikinciye bağlıysa, ilk öğe ikinci öğenin bir işaretçisi olarak dizinine sahip olacaktır. En iyi, bellek kullanımı ve hızında tanımlanmıştır.Sonunda bulunan tüm öğeler birbiriyle karşılaştırılacaktır. Örnek: Eğer nesneler topluluğu tutmak gerekiyor gibi

[Item , pointer] [attribute, attribute, ...] 
[11011, 1001] [ 1101,  1111 ] 
[10001, 1000] [ 1110,  0101 ] 
[11111, 0010] [ 1111,  1110 ] 
[11011, 0001] [ 0010,  1010 ] 

Teşekkür

+1

Birbirine bağlı bir liste gibi geliyor – CodesInChaos

+0

'Dev' ne kadar büyük? Genel kullanım, okuma miktarı ya da çok fazla ekleme/silme nedir? Ne tür bir performansa ihtiyacınız var? – RvdK

+0

"En iyi" yi tanımlamanız gerektiğini düşünüyorum. Bellek tüketimi, hız, kodlama kolaylığı, başka bir şey mi düşünüyorsunuz? –

cevap

2

Yani, temelde görünüyor her biri aşağıdaki özelliklere sahiptir: mantıksal için

  • Referans sonraki ürün

Yani bir öğe (herşey kamu tutmak için sadece hızlı bir örnek ... tam olarak değil en iyi uygulama, ancak sizin durumunuzda sakıncası olmaz) böyle bir şey görünecektir:

public struct MyItem 
{ 
    public Dictionary<String, String> attributes; 
    public MyItem next; 
} 

Sonra hepinizi w zaman, Sonra

MyItem item1 = new MyItem(); 
item1.attributes["name"] = "Joe"; 
item1.next = null; // this is the default behaviour... just illustrating here 
myList.Add(item1); 

MyItem item2 = new MyItem(); 
item2.attributes["name"] = "Mary"; 
item2.next = item1; 
myList.Add(item2); 

sizi: bir şeyler eklemek istediğinizde

List<MyItem> myList; 

, kolay: gerek bir listesini tutmaktır karıncaya dönüş, sadece takip et.

MyItem item = myList[0]; 
while (item != NULL) 
{ 
    Console.WriteLine(item["name"]); 
    item = item.next; 
} 

Bu yardımcı olur umarım.

+0

Soruda '11011' iki işaretçiye sahiptir: '1001' ve' 0001'. Sorunun posteri sorunun çok iyi açıklanıp açıklanmadığından emin değilim. –

+0

Anladığım kadarıyla sadece bir işaretçi var ... temel olarak tek başına bir liste. Bu cevap esas olarak olası bir çözümü açıklamaktır ... bunu gerektiği gibi düzenleyebiliriz. – Gigi

+0

Merhaba Gigi, cevap için teşekkürler. Yapıları okuyordum. Gerçekten de çözüm gibi görünüyorlar. Bence bu şekilde gidiyorum. Hashsets herhangi bir yardım olabilir eğer hala belirsiz miyim? – user2257315