c#SortedSet如何获取元素

时间:2013-10-24 04:31:11

标签: c# .net 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
}

4 个答案:

答案 0 :(得分:2)

你真的需要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...
)

答案 1 :(得分:1)

从.NET Framework 4.7.2开始,SortedSet可以使用TryGetValue method

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可能要考虑使用PowerCollections项目-它对标准通用集合有很多有用的改进。