我基本上想要跟踪旧文件名和每个文件的新文件名。
我可以使用我想的字典,但我想保持它非常轻量级。
多维字符串数组是否也能正常工作?
答案 0 :(得分:9)
使用Dictionary<string,string>
类:
fileNames[oldName]
获取名称,而不是使用循环或LINQ 真的,字典是这里的轻量级解决方案。
答案 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)
添加,此链接有一些关于性能的分析。可能对某人有帮助。