C# 数据结构问题(使用哪个集合?)

标签 c# list data-structures sortedlist

我需要实现一个大的 Widget 对象集合,每个对象都包含一个唯一的文件路径字符串(“FilePath”)。我需要能够执行以下操作:

  1. 根据文件路径快速检索 Widget 对象
  2. 在不创建新对象的情况下更改 Widget 的文件路径(多个其他对象可能包含对单个 Widget 的引用,跟踪它们会影响性能)
  3. 给定一个 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/

相关文章:

c# - 帮助使用 NHibernate 映射类对象列表

c# - 控制台应用程序运行代码错误

c# - 生成唯一随机数的聪明方法

python - 从字符串到整数的列表理解更改输出

python - 如何在 Python 的集合列表中找到并集?

c# - 从受信任的域中将成员添加到 AD 组

python - 从列表中过滤掉重复的属性

c - while 循环内出现段错误

algorithm - 字符串集实现

c - 使用数组实现查找深度为 D 的二叉树中叶节点的数量