2013-10-24 3 views
2

Я довольно новичок в этом, так что простите мою нообильность здесь.C# SortedSet как получить элемент из

Я пытаюсь редактировать элемент в сортировке C#, если обнаруживаю, что элемент существует. Поэтому я могу использовать 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, который красно-черное дерево делать? Если вам не нужна сортировка, вы не должны ее использовать. Считаете ли вы, что HashSet или Dictionary вместо этого подходит (быстро) для получения товара по ключу?

В вашем случае вам, вероятно, нужно создать 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

Ну, я думаю, мне не нужно сортировать их. Сортировка будет приятной, но я могу справиться с ними, не сортируя. Как я могу получить элемент из hashset по ключу? –

+0

@MatthewTheTerrible, я обновил свой ответ. –

+0

Я только что понял, что вместо этого могу использовать этот код и намного быстрее. Person exists = list.FirstOrDefault (person => person.Name == p.Name); Я не знаю, почему я использовал Where. Это замедляло все до ползания, потому что, поскольку мой список рос, ему приходилось искать все больше и больше имен .... –

0

это невозможно получить элемент от SortedSet или HashSet коллекций (используя метод Contains или как-нибудь еще). Можно просто узнать, содержит ли коллекция элемент. Поскольку для того, чтобы найти этот элемент в коллекции, он уже использует этот элемент (передавая его методу Contains), можно предположить, что один уже имеет этот элемент.

Смежные вопросы