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

时间:2010-11-25 09:16:50

标签: c# arrays multidimensional-array

我基本上想要跟踪旧文件名和每个文件的新文件名。

我可以使用我想的字典,但我想保持它非常轻量级。

多维字符串数组是否也能正常工作?

5 个答案:

答案 0 :(得分:9)

使用Dictionary<string,string>类:

  1. 它为您管理自己的尺寸
  2. 它使用哈希来加速搜索元素
  3. 您可以转到fileNames[oldName]获取名称,而不是使用循环或LINQ
  4. 真的,字典是这里的轻量级解决方案。

答案 1 :(得分:3)

在您的方案中使用Dictionary<string,string>的问题是所有密钥都必须是唯一的,因此如果您使用“旧文件名”作为密钥,那么您不能拥有2个“旧文件名”的方案'是一样的。

最好的解决方案(在我看来)是

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);

答案 2 :(得分:2)

你也可以考虑使用StringDictionary,但它有点老了!

当恐龙统治地球时,它被用于仿制药之前的土地上。

答案 3 :(得分:1)

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

使用多维字符串数组,您必须自己搜索数组(您可以对数组进行排序并进行二进制搜索,但在一般情况下仍然不如哈希表那么好),所以你会在访问时失去运行时成本。

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

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

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

答案 4 :(得分:1)

添加,此链接有一些关于性能的分析。可能对某人有帮助。

Performance Analysis