【发布时间】:2018-05-10 18:10:33
【问题描述】:
我在决定数据容器时遇到了一些问题:
我需要保存一个键值数组,这样我就可以通过索引访问数据。
我从一个开始:
static Tuple<string, string>[] kv = {
Tuple.Create("K1", "V1"),
Tuple.Create("K2", "V2"),
Tuple.Create("K3", "V3"),
};
var index = 1;
Console.WriteLine(kv[index].Item1);
Console.WriteLine(kv[index].Item2);
另一方面,我可以简单地使用结构或类:
public struct KV
{
public string K;
public string V;
}
static KV[] kv =
{
new KV { K = "K1", V = "V1" },
// etc...
};
Console.WriteLine(kv[index].K);
Console.WriteLine(kv[index].V);
与结构/类方法相比,使用Tuple 有什么优势吗?还是有比上述更好的容器来保存这些数据?
【问题讨论】:
-
假设键是唯一的,这里通常使用
Dictionary<string, string>。 -
我可能遗漏了一些东西,但是您不使用
Dictionary<TKey, TValue>有什么原因吗? msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx -
结构相对于元组的优势在于它为您提供了命名字段。随着程序复杂性的增加,如果它们是元组,则可能不清楚这些值的初衷是什么。元组可能比结构具有更小的内存占用,但如果您使用高级语言进行编程,它可能可以忽略不计。
-
@Rufus L,我需要按索引访问数据,而这对于字典来说是无法实现的 AFAIK
-
仅供参考,使用 C# 7,您可以使用新的值元组并命名为
(string Key, string Value)[],我认为只有在数组范围有限时才更喜欢。
标签: c#