此问题已回答here
我试图在我的应用程序中使用Tuple。所以我想区分元组,字典和列表。
Dictionary<int, string> dic = new Dictionary<int, string>();
Tuple<int, string> tuple = new Tuple<int, string>();
List<int> list = new List<int>();
这三者有什么区别?
答案 0 :(得分:7)
首先,AFAIK,没有带有两个类型参数的列表 - 所以你的列表可以是List<int>
或List<string>
(或SortedList<int,string>
,但是那个&#39; sa不同的课程。)
Tuple<T1, T2>
包含两个值 - 在这种情况下,一个int和一个字符串
您可以使用元组将项目绑定在一起(可能是不同类型的项目)
这在许多情况下可能很有用,例如,您希望从方法返回多个值
我个人讨厌Item1
,Item2
属性名称,所以我可能会在代码中使用围绕元组的包装类。
Dictionary<TKey, TValue>
是KeyValuePair<TKey, TValue>
的集合
字典将键映射到值,以便您可以拥有例如人员字典,并且每个人都可以将SSN作为键。
List<T>
是T
的集合
您可以使用索引,Find
方法或简单地使用linq(因为它实现IEnumerable<T>
)来获取单个项目。
答案 1 :(得分:1)
列表可以按特定顺序存储一系列对象,以便您可以索引到列表中,或迭代列表。 List是一个可变类型,意味着列表可以在创建后进行修改。
元组类似于列表,除非它是不可变的。列表和元组之间也存在语义差异。引用Nikow的回答:
元组有结构,列表有顺序。
字典是键值存储。它没有订购,它要求密钥可以清洗。按键查找速度很快。
答案 2 :(得分:1)
因此,Dictionary
和List
之间的差异,您已经看到了question you linked to。那么什么是Tuple
?通过MSDN:
元组是一种具有特定数量和值序列的数据结构。
Tuple<T1, T2>
类表示2元组或对,它是具有两个组件的元组。 2元组类似于KeyValuePair<TKey, TValue>
结构。
虽然其他两个数据结构代表不同的集合项目(通用类型为您声明的任何类型),但Tuple<T1,....>
是包含预定义的单项属性数量 - 类似于定义具有少量属性的类。
由于前两个是项目集合而元组是单个项目,因此它们在如何处理它们方面扮演着截然不同的角色。
了解更多
答案 3 :(得分:0)
虽然您链接的答案讨论了List<T>
和Dictionary<int, T>
之间的区别,但Tuple<int, string>
未得到解决。
来自MSDN
表示2元组或对。
元组是一对值,与其他类型相反,它们代表一些集合。想想一个方法,它返回一个错误代码和最后一个错误的字符串(我不会这样编写代码,但是为了得到这个想法)
Tuple<int, string> GetLastError()
{
...
}
现在您可以像
一样使用它var lastError = GetLastError();
Console.WriteLine($"Errorcode: {lastError.Item1}, Message: {lastError.Item2}");
这样,如果要返回复合值,则无需创建类。
请注意:从C#7开始,有一个更新,更简洁的语法来返回元组。