C# - Tuple和Dictionary和List之间有什么区别

时间:2017-07-25 05:19:44

标签: c# list dictionary tuples

此问题已回答here

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

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

这三者有什么区别?

4 个答案:

答案 0 :(得分:7)

首先,AFAIK,没有带有两个类型参数的列表 - 所以你的列表可以是List<int>List<string>(或SortedList<int,string>,但是那个&#39; sa不同的课程。)

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

Dictionary<TKey, TValue>KeyValuePair<TKey, TValue>的集合 字典将键映射到值,以便您可以拥有例如人员字典,并且每个人都可以将SSN作为键。

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

答案 1 :(得分:1)

列表可以按特定顺序存储一系列对象,以便您可以索引到列表中,或迭代列表。 List是一个可变类型,意味着列表可以在创建后进行修改。

元组类似于列表,除非它是不可变的。列表和元组之间也存在语义差异。引用Nikow的回答:

  

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

字典是键值存储。它没有订购,它要求密钥可以清洗。按键查找速度很快。

答案 2 :(得分:1)

因此,DictionaryList之间的差异,您已经看到了question you linked to。那么什么是Tuple?通过MSDN:

  

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

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

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

了解更多

此外,您可以查看What requirement was the tuple designed to solve?

答案 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开始,有一个更新,更简洁的语法来返回元组。