2009-06-24 13 views
5

skończył z tym okropnym struktury danych:Szukasz alterantive do listy <KeyValuePair <string, KeyValuePair <string, string >>>

List<KeyValuePair<string, KeyValuePair<string, string>>> 

To nie jest prawdopodobne, aby uzyskać ogromny (< Szacuję 1K) i Mam zamiar powtórzyć tę listę w kółko.

Ktoś może wymyślić lepszą alternatywę z wbudowanymi typami?

+1

odpowiedzi na to pytanie mogą być pomocne http://stackoverflow.com/questions/101825/whats-the- best-of-using-a-pair-triple-etc-of-value-as-one-value-in-c –

Odpowiedz

10

Najlepszym rozwiązaniem byłoby owinięcie własnej klasy Tuple, podobnej do tej shipping in .NET 4.0.

Wtedy można mieć pojedyncza:

List<Tuple<string,string,string>> 

Jest to dość łatwe do napisania w .NET 2.0 - to w zasadzie tylko trójka z wartościami, zamiast 2 w KeyValuePair. Nie ma wbudowanego equivelentu dla tripletu wartości w .NET 2.0.


Edit:

Po przeczytaniu komentarz o kwerend w innym poście, pomyślałam, że wspomina o tym, jak dobrze -

Nawet jeśli nie mają unikalne wartości w key1, ty może znacznie przyspieszyć dowolny typ kwerendy/wyszukiwania przy użyciu:

Dictionary<string, List<KeyValuePair<string,string>>> 

Następnie, zamiast przechowywania pojedynczy KeyValuePair, można spojrzeć na ich listę za pomocą klawisza w pierwszym e lement. Byłoby to znacznie, znacznie szybciej, gdybyś potrzebował znaleźć wszystkie elementy z pierwszym kluczem ...

+0

Podoba mi się wersja ze słownikiem - też wymyśliłem coś takiego (jako rodzaj grupy według podejścia) - Prawdopodobnie będę szukał tego słownika wiele razy w tym ciągu, który jest teraz kluczem – JohnIdol

+0

Zrobiłem to wiele razy i miał bardzo mało problemów. –

10
struct MrStruct 
{ 
    public string Key1, 
    public string Key2, 
    public string Value1 
} 


List<MrStruct>; 

Zakłada, że ​​masz dostęp do listy sekwencyjnie, tak jak powiedziałeś iterować. Potencjalnie inne struktury danych mogą być szybsze w wyszukiwaniu.

+0

prosty i prosty - podoba mi się - czy byłby lepszy niż to, o co pytam na key1? – JohnIdol

+0

Jeśli klucz1 jest unikatowy, możesz rozważyć polecenie SortedList , w przeciwnym razie możesz posortować listę <> na podstawie MrStruct.Key1 w celu uzyskania wydajności. – user7116

+0

Jakiego rodzaju zapytania robisz? Jeśli klucz 1 jest unikatowy, użycie słownika będzie znacznie, znacznie szybsze ... –

Powiązane problemy