4

我对此很陌生,所以请原谅我在这里的笨拙。

如果我发现该项目存在,我正在尝试编辑 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
}
4

4 回答 4

3

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

于 2018-05-21T09:49:10.787 回答
2

对于版本 4.7.2 之前的 .NET Framework:

无法从集合SortedSet或集合中获取元素HashSet(使用Contains方法或其他方式)。只需了解集合是否包含该元素即可。因为为了在集合中找到这个元素,已经使用了这个元素(将它传递给Contains方法),可以假设已经有了这个元素。

对于从 4.7.2 版开始的 .NET Frameworks:

看到这个答案。

于 2015-03-26T13:31:47.727 回答
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...
)
于 2013-10-24T04:48:34.313 回答
0

您可能需要考虑使用PowerCollections项目——它对标准通用集合进行了许多有用的改进。

于 2019-03-20T17:39:34.690 回答