【问题标题】:What and When to use Tuple? [duplicate]什么时候使用元组? [复制]
【发布时间】:2012-11-30 06:47:32
【问题描述】:

请有人解释一下元组是什么以及如何在真实世界场景中使用它。我想了解这如何丰富我的编码体验?

【问题讨论】:

    标签: c# .net c#-4.0 .net-4.0 tuples


    【解决方案1】:

    msdn article 用示例很好地解释了这一点,“元组是一种具有特定数量和元素序列的数据结构”。

    元组通常有四种使用方式:

    1. 表示单个数据集。例如,一个元组可以 表示一个数据库记录,它的组件可以表示 记录的各个字段。

    2. 提供对数据集的轻松访问和操作。

    3. 从一个方法返回多个值而不使用 out 参数 (在 C# 中)或 ByRef 参数(在 Visual Basic 中)。

    4. 通过单个参数将多个值传递给方法。为了 例如,Thread.Start(Object) 方法有一个参数 允许您为线程执行的方法提供一个值 启动时间。如果您提供 Tuple<T1, T2, T3> 对象作为方法 参数,您可以为线程的启动例程提供三个 数据项。

    【讨论】:

      【解决方案2】:

      元组允许您将可能不同类型的多个值组合成一个对象,而无需创建自定义类。如果您想编写一个例如返回三个相关值但又不想创建新类的方法,这会很有用。

      通常你应该创建一个类,因为这允许你为每个属性赋予有用的名称。大量使用元组的代码将很快变得不可读,因为这些属性称为Item1Item2Item3 等。

      【讨论】:

      • 我最多将它用于 2 个值和每个不同的类型,即字符串、整数。否则它会成为你能写的最糟糕的代码。
      • 限制使用,也许更愿意只在类/模块中私下使用它。此外,包含复杂类型(“客户”、“员工”等)的元组用法可能比原语更直接一些。没有什么比尝试使用大量 Tuples. 更糟糕的了
      【解决方案3】:

      元组和类的区别在于元组没有属性名。这几乎从来都不是一件好事,我只会在参数相当无意义时使用元组,例如在抽象数学公式中。超过 5,6,7 维的抽象微积分可能需要一个元组作为坐标。

      【讨论】:

      • 在这种情况下(值的类型可能相同)使用简单的数组还不够吗?使用元组有一些好处吗?
      • 类型可能很容易不同,但我猜 IComparable 实现有时在同质情况下可能是一个优势。正如你所说,对于更简单的场景,我倾向于使用数组。
      • 非常好的答案!
      • 我不同意这几乎从来都不是一件好事。在数据表示中包含属性名称有一些不可忽略的开销。元组更适合您的 CPU。
      • 不再正确,因为现在可以命名元组属性
      【解决方案4】:

      这是了解元组类型最重要的事情。元组是一个类,而不是一个结构。因此它将在托管堆上分配。分配的每个类实例都会增加垃圾收集的负担。

      注意: 属性 Item1、Item2 和进一步没有设置器。您不能分配它们。元组在内存中创建后是不可变的。

      【讨论】:

      • “Burden” - 你有没有观察到垃圾回收问题?
      • 绝对!想想网络通信处理代码。它正在分配和释放大量内存,因此每隔几分钟 GC 就会运行一次,并且可能需要几秒钟才能完成。如果下游的某些东西实时依赖该数据,这是不可接受的。另一个示例是资源受限的设备(例如移动设备)运行实时应用程序(例如行车路线应用程序)。
      【解决方案5】:

      元组类允许开发人员“快速而懒惰”,无需为特定用途定义特定类。

      属性名称为 Item1、Item2、Item3 ...,在某些情况下或没有文档时可能没有意义。

      元组类具有强类型的泛型参数。 Tuple 类的用户仍然可以从泛型参数的类型中推断出来。

      【讨论】:

      • 所以也许 C# 7 应该让动态创建类/对象而不是这个元组更容易?
      猜你喜欢
      • 2010-09-11
      • 1970-01-01
      • 2014-04-29
      • 2011-09-12
      • 2012-12-16
      • 2013-10-19
      • 1970-01-01
      • 2016-03-09
      • 2011-09-18
      相关资源
      最近更新 更多