我需要实现一个大的 Widget 对象集合,每个对象都包含一个唯一的文件路径字符串(“FilePath”)。我需要能够执行以下操作:
- 根据文件路径快速检索 Widget 对象
- 在不创建新对象的情况下更改 Widget 的文件路径(多个其他对象可能包含对单个 Widget 的引用,跟踪它们会影响性能)
- 给定一个 Widget 引用,确定它的文件路径
我首先想到的是使用一个通用的 SortedList,它使用文件路径作为键,但是为数千个对象复制路径会很快耗尽内存。我考虑过从对象中删除路径并仅将其存储在键列表中,但这会使上述要求 3 难以实现。
我现在倾向于滚动我自己的派生自 List<> 的类,该类按排序顺序添加 Widget 对象,并使用二进制搜索检索它们。只需从列表中删除对象、更改其文件路径并将其添加回列表即可满足要求 2。
但我是 C# 的新手,我想咨询一下这里的大神,看看我是否遗漏了另一个明显的解决方案。
谢谢!
最佳答案
你不能用 2 部词典吗?
Dictionary<string, Widget> WidgetsByPath;
Dictionary<Widget, string> PathsByWidget;
处理会有更多的开销(因为您需要在插入、修改或删除元素时更新两个字典)但您可能只会多次插入一次查找,所以它应该足够了。
您甚至可以围绕它构造一个简单的类:
public class Widgets
{
public Widget Add(string Path, Widget wdg)
{
// Chek it doesn't already exits and all...
WidgetsByPath.Add(Path, wdg);
PathsByWidget.Add(wdg, Path);
}
public void Delete(string Path)
{
Widget w = WidgetsByPath[Path];
PathsByWidget.Delete(w);
WidgetsByPath.Delete(Path);
}
}
关于C# 数据结构问题(使用哪个集合?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/740349/