c#SortedSet如何获取元素

我对此很陌生,请原谅我在这里的无聊。

我正在尝试编辑ac#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 } 

你真的需要SortedSet黑树的SortedSet吗? 如果您不需要排序,则不应使用它。 您是否考虑过HashSetDictionary更适合(快速)逐项获取项目?

在您的情况下,您可能需要使用键等于Dictionary创建Dictionary实例,即:

 Dictionary list; 

然后你可以通过它的名字得到人,复杂性是O(1)

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

甚至更好:

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

从.NET Framework 4.7.2开始,SortedSet可以使用TryGetValue方法 。

无法SortedSetHashSet集合中获取元素(使用Contains方法或其他方式)。 人们可以知道集合是否包含元素。 因为为了在集合中找到这个元素,已经使用了这个元素(将它传递给Contains方法),可以假设已经有了这个元素。