繁体   English   中英

C#-元组与字典和列表有什么区别

[英]C# - What is the difference between Tuple and Dictionary and List

这个问题已经在这里回答


我试图在我的应用程序中使用Tuple。 所以我想区分元组,字典和列表。

 Dictionary<int, string> dic = new Dictionary<int, string>();
 Tuple<int, string> tuple = new Tuple<int, string>();
 List<int> list = new List<int>();

这三个之间有什么区别?

首先,AFAIK,没有列表带有两个类型参数-因此您的列表可以是List<int>List<string> (或SortedList<int,string> ,但这是一个不同的类)。

Tuple<T1, T2>包含两个值-在这种情况下为一个int和一个字符串。
您可以使用元组将项目(可能是不同类型)绑定在一起。
这在许多情况下可能很有用,例如,您想从一个方法中返回一个以上的值。
我个人讨厌Item1Item2属性名称,因此我可能在代码中使用围绕Tuples的包装类。

Dictionary<TKey, TValue>KeyValuePair<TKey, TValue>的集合。
词典将键映射到值,这样您就可以拥有一个人词典,例如,每个人都有他们的SSN作为键。

List<T>是集合T
您可以使用索引, Find方法或简单地使用linq(因为它实现IEnumerable<T> )来获取单个项。

列表可以按一定顺序存储对象序列,以便您可以索引到列表中,或遍历列表。 列表是可变类型,表示列表创建后可以修改。

元组与列表类似,但它是不可变的。 列表和元组之间在语义上也有所不同。 引用Nikow的答案:

元组具有结构,列表具有顺序。

字典是键值存储。 它不是有序的,并且要求密钥是可哈希的。 通过键快速查找。

因此,对于DictionaryList的区别,您已经看到了链接到问题 那么什么是Tuple 通过MSDN:

元组是具有特定数量和值序列的数据结构。 Tuple<T1, T2>类表示2元组或对,它是具有两个成分的元组。 2元组类似于KeyValuePair<TKey, TValue>结构。

虽然其他两个数据结构表示不同的项目集合 (泛型为您声明的任何类型),但Tuple<T1,....>是包含预定义属性数量的单个项目 -类似于定义具有很少属性的类。

由于前两个是项的集合,而元组是单个项,因此在处理它们方面,它们扮演着截然不同的角色。

阅读更多

此外,您还可以查看元组旨在解决什么要求?

当您链接的答案讨论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开始,有一种更新,更简洁的语法用于返回元组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM