2013-10-24 122 views
2

我對此很新,所以原諒我在這裏的noobishness。c#SortedSet如何獲得一個元素

我想編輯c#sortedset中的項目,如果我發現該項目存在。所以我可以使用list.contains(value)並且發現值存在於列表中。但是,我如何從列表中獲得該項目。這是我的。當我的名單變得非常大時,這會變得非常緩慢,所以我猜測一定有比這更好的方法。

if (list.Contains(p)) 
{ 
    Person exists = list.First(person => person.Name.Equals(line[0])); 
    // do something here to exists 
} 
else 
{ 
    // just add the person to the list 
} 

回答

1

你真的需要SortedSet這是紅黑樹嗎?如果你不需要排序,你不應該使用它。您是否考慮過HashSetDictionary,哪個更適合(快速)按鍵獲取項目?

在你的情況,你可能需要使用鑰匙相當於人的名字創建Dictionary實例,即:

Dictionary<string, Person> list; 

然後,你可以通過它的名字弄人,複雜度爲O(1)

if(list.ContainsKey(line[0])) 
{ 
    list[line[0]]... 
} 

甚至更​​好:

Person p; 

if(list.TryGetValue(line[0], out p)) 
{ 
    p... 
) 
+0

嗯,我想我不必將它們排序。排序會很好,但我可以處理它們不被排序。我如何通過密鑰從哈希集中獲取項目? –

+0

@MatthewTheTerrible,我已經更新了我的答案。 –

+0

我剛纔意識到我可以使用這個代碼,而且它的速度要快得多。 Person exists = list.FirstOrDefault(person => person.Name == p.Name);我不知道我爲什麼使用Where。這讓所有東西都慢下來,因爲隨着我的列表越來越多,它不得不搜索越來越多的名字......呃。 –

0

這是不可能SortedSetHashSet集合中獲取元素(使用Contains方法或其他方式)。人們可以知道該集合是否包含元素。由於爲了在集合中找到這個元素,一個已經使用這個元素(將它傳遞給Contains方法),可以假定一個已經有這個元素