我对此很陌生,请原谅我在这里的无聊。
如果我发现该项目存在,我正在尝试编辑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
}
答案 0 :(得分:2)
你真的需要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...
)
答案 1 :(得分:1)
从.NET Framework 4.7.2开始,SortedSet可以使用TryGetValue method。
答案 2 :(得分:0)
无法从SortedSet
或HashSet
集合中获取元素(使用Contains
方法或其他方式)。人们可以知道集合是否包含元素。因为为了在集合中找到这个元素,已经使用了这个元素(将它传递给Contains
方法),可以假设一个已经这个元素。
答案 3 :(得分:0)
您可能要考虑使用PowerCollections项目-它对标准通用集合有很多有用的改进。