【问题标题】:What is the difference between Tuple, Dictionary and List in C#?C#中的元组、字典和列表有什么区别?
【发布时间】:2017-12-30 20:38:32
【问题描述】:

这个问题已经有了答案here


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

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

这三个有什么区别?

【问题讨论】:

  • 真的有List&lt;int, string&gt;这样的东西吗?
  • 你的列表还能编译吗?
  • "这个问题在这里已经有了答案" 为什么还要再问呢?
  • @HimBromBeere 请看没有区分元组的链接。
  • 所以你应该在你的问题中提到这一点。

标签: c# list dictionary tuples


【解决方案1】:

首先,AFAIK,没有任何列表接受两个类型参数 - 所以您的列表可以是 List&lt;int&gt;List&lt;string&gt;(或 SortedList&lt;int,string&gt;,但这是一个不同的类)。

Tuple&lt;T1, T2&gt; 包含两个值——在这种情况下,一个 int 和一个 string。您可以使用元组将项目绑定在一起(可能是不同的 类型)。这在许多情况下可能很有用,例如,您想从一个方法返回多个值。

我个人讨厌 Item1Item2 属性名称,所以我可能会在我的代码中使用元组周围的包装类。

Dictionary&lt;TKey, TValue&gt;KeyValuePair&lt;TKey, TValue&gt; 的集合。字典将键映射到值,例如,您可以拥有一个人字典,并且每个人都将其SSN 作为键。

List&lt;T&gt;T 的集合。 您可以使用索引、Find 方法或简单的LINQ(因为它实现了IEnumerable&lt;T&gt;)来获取单个项目。

【讨论】:

    【解决方案2】:

    虽然您链接的答案讨论了List&lt;T&gt;Dictionary&lt;int, T&gt; 之间的区别,但未解决Tuple&lt;int, string&gt;

    来自 MSDN

    表示一个 2 元组或对。

    元组是一对值,与其他类型相对,代表某种集合。想一个方法,它返回一个错误代码和最后一个错误的字符串(我不会这样写代码,但要明白)

    Tuple<int, string> GetLastError()
    {
        ...
    }
    

    现在你可以像这样使用它了

    var lastError = GetLastError();
    Console.WriteLine($"Errorcode: {lastError.Item1}, Message: {lastError.Item2}");
    

    如果你想返回一个复合值,这样你就不必创建一个类。

    请注意:从 C# 7 开始,返回元组的语法更新、更简洁。

    【讨论】:

      【解决方案3】:

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

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

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

      字典是键值存储。它不是有序的,它要求键是可散列的。按键查找速度很快。

      【讨论】:

        【解决方案4】:

        所以对于DictionaryList 之间的区别,您已经看到question you linked to。那么Tuple 是什么?通过 MSDN:

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

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

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

        阅读更多

        另外你可以看看What requirement was the tuple designed to solve?

        【讨论】:

          猜你喜欢
          • 2017-12-03
          • 2010-10-12
          • 2012-03-14
          相关资源
          最近更新 更多