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

Bil*_*oks 3 c# list sortedlist data-structures

我需要实现一个大的Widget对象集合,每个对象都包含一个唯一的文件路径字符串("FilePath").我需要能够做到以下几点:

  1. 给定文件路径,快速检索Widget对象
  2. 更改Widget的文件路径而不创建新对象(多个其他对象可能包含对单个Widget的引用,并且跟踪它们会影响性能)
  3. 给定Widget参考,确定它的文件路径

我首先想到使用文件路径作为键来使用通用的SortedList,但是复制数千个对象的路径可能会很快占用内存.我考虑从对象中删除路径并仅将其存储在密钥列表中,但这会使上面的要求3难以实现.

我现在倾向于滚动从List <>派生的我自己的类,它按排序顺序添加Widget对象,并使用二进制搜索检索它们.只需从列表中删除一个对象,更改它的文件路径,然后将其添加回列表,即可完成要求2.

但我对C#比较陌生,我想在这里检查一下好心人,看看我是否错过了另一个明显的解决方案.

谢谢!

Jor*_*oba 9

你不能使用2个dictionarys吗?

Dictionary<string, Widget> WidgetsByPath;
Dictionary<Widget, string> PathsByWidget;
Run Code Online (Sandbox Code Playgroud)

处理会有一些额外的开销(因为你需要在插入,修改或删除元素时更新两个字典),但你可能只会插入一次多次查找,所以应该这样做.

你甚至可以围绕它构建一个简单的类:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)