为什么要使用元组tuple?

问题

在一些语言中,如C#或Python等,都提供了一种概念叫Tuple,即元组。在常见的面向对象的程序设计语言中,如C++,C#或Java中,都有类或结构体的概念。元组完全可以使用类或者结构体来表示,那么为什么这些语言又“多此一举”地提供了元祖这个概念呢?所以才有此问题:为什么要使用元组?

本文不是tuple的基础文章,而是假设用户已经对tuple有了一定的了解,关于元组的概念请参阅相关文章。比如在.NET平台上,元组并不是什么新东西,它们已经在F#,Python等编程语言以及数据库中存在了相当长的一段时间。在C#语言当中,从4.0引入,7.0进行了扩展,介绍相关可参考这篇不错的文章:详解C# Tuple VS ValueTuple(元组类 VS 值元组)

原因1:简化操作

在某些场景下,我们可能需要2个返回值,比如计算某个点的单位向量,就会返回X和Y两个值。这时候,我们能学的解决方法是定义一个点的类,或者引用已有的类包(如 System.Drawing.PointF)。若是一个专用的图形处理软件倒也罢了,但是整个整个有个别几个地方会用到,还要进行类的定义或类包的引入,那么就有小题大作了。

这时候,使用元组就可以轻松地解决问题。我们可以利用元组,直接返回有2个参数的结果。示例代码如下所示。

   // 函数定义
   private static (double X, double Y) Nomalize(double x, double y)
   {
       if (x == 0 && y == 0)
           return (0, 0);
       double len = Math.Sqrt(x * x + y * y);
       return (x / len, y / len);
   }

   // 代码调用 
   private void Button1_Click(object sender, EventArgs e)
   {
       var n = Nomalize(234.5, -132.5); 
       Console.WriteLine($"X={n.X}, Y={n.Y}.");
   }

原因2:函数编程

函数式编程(Functional Programing)中,经常会对数据进行类似元组格式的定义,在这种情况下,也可以很好地使用它们。

原因3:数据库表的表示

元组可用于存储固定大小的有限序列的同构或异构数据。 当数据库表在临时进行表示的时候,可以不使用类而更简便地使用元组。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页