字符串对(多维数组?)C#

字符串对(多维数组?)C#,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我基本上希望跟踪旧文件名和每个文件的新文件名 我想我可以用一本字典,但我想保持它的轻量级 多维字符串数组也可以吗?使用字典类: 它为您管理自己的大小 它使用散列来加速元素的搜索 您只需转到fileNames[oldName]即可获得名称,而不必使用循环或LINQ 真的,字典是这里轻量级的解决方案。 你也可以考虑使用,但是它有点老了!p> 当恐龙统治地球时,在仿制药出现之前,它就已经在陆地上使用了。你对轻量化的定义是什么?您是否担心内存使用或运行时 使用多维字符串数组时,您必须自己搜索数组(您可以

我基本上希望跟踪旧文件名和每个文件的新文件名

我想我可以用一本字典,但我想保持它的轻量级

多维字符串数组也可以吗?

使用
字典
类:

  • 它为您管理自己的大小
  • 它使用散列来加速元素的搜索
  • 您只需转到
    fileNames[oldName]
    即可获得名称,而不必使用循环或LINQ

  • <>真的,字典是这里轻量级的解决方案。

    你也可以考虑使用,但是它有点老了!p>
    当恐龙统治地球时,在仿制药出现之前,它就已经在陆地上使用了。

    你对轻量化的定义是什么?您是否担心内存使用或运行时

    使用多维字符串数组时,您必须自己搜索数组(您可以对数组进行排序并进行二进制搜索,但在一般情况下这仍然不如哈希表好),因此您将损失访问的运行时成本

    对于多维字符串数组,您还需要提前知道分配内存需要多少个条目。如果不这样做,则会浪费时间,并且会在重新分配越来越大的阵列时浪费内存。字典不使用连续的内存区域,因此在扩展时不会重新分配

    最后,在内存方面,请记住字符串是一个引用。您将看到的内存使用差异只与查找结构有关,与您要跟踪的数据相比,查找结构可能很小。如果关注的是保持连续的内存块以提高缓存效率,那么这两种解决方案都不比另一种好,因为字符串存储在数据结构(作为引用)之外,因此任何字符串读取都会失去这种连续性


    总之,没有理由在字典上使用多维数组。

    在您的场景中使用字典的问题是所有键都必须是唯一的,因此如果您使用“旧文件名”作为键,那么您不能有两个“旧文件名”相同的场景

    (在我看来)最好的解决办法是


    字典有什么重量级?
    List
    更合适,因为
    List
    有顺序,但
    字典中的元素是无序的。使用
    List
    您将知道最后一个元素是当前名称。Dictionary和大型对象堆给我带来了麻烦,因为Dictionary为对象及其键维护了两个数组。如果您有大量文件,您可能更喜欢SortedDictionary。这个类是用二叉树而不是哈希表实现的。或者,如果文件数量稳定,则在创建字典时应指定字典的容量。实际上,字典确实使用连续的内存区域。它有两个数组(一个是int,一个是data节点)。它们的大小至少与物品数量相同。在扩展时,如果字典已满负荷,字典将分配两个新数组,比旧数组大一倍多。它将数据复制到新阵列,并用它们替换旧阵列。然而,SortedDictionary是一个二叉树,因此它不使用大的连续内存区域或在扩展时重新分配。不过,我仍然同意你的结论:)谢谢你。考虑到这是最流行的方法,我假设内部哈希表被实现为一个基本固定的链式桶列表数组,但是阅读当前的实现,我对它的幼稚有些失望。
    List<Tuple<string,string>>
    
    List<Tuple<string,string>> list = new List<Tuple<string, string>>();
    
    list.Add(Tuple.Create(oldfilename,newfilename));
    
    var files = list.Where(t => t.Item1 == oldfilename);