多元組(Tuple)的應用

多元組(Tuple)是什麼?

Tuple是一種有限資料組合,

Tuple的實用性與適用場合

Tuple在特定的場合很有用,主要的優點在於解省建立特定資料結構的功夫。

舉例來說,在C#中,如果要儲存一個平面座標(x, y),可能會使用Array或List。 如下面的範例:

class App
{
    public static void Main()
    {
        var store = new List<double[]>();
        var point = new double[]{0,1};
        store.Add(point);

        var store2 = new List<double[]>();
        var point2 = new List<double>(){0,1};
        store.Add(point2);        
    }
}

為了儲存一組座標,而需要寫很多的程式碼。 如果想要用自訂的資料結構則會向下面這樣:

class App
{
    public struct Point
    {
        public Point(double x, double y)
        {
            X = x;
            Y = y;
        }
        public double X { get; }
        public double Y { get; }
    }
    public static void Main()
    {
            var store = new List<Point>();
            var point =  new Point(0,1);
            store.Add(point);       
    }
}

仍然會需要寫許多的程式碼,從這個角度延伸下去,假設今天有a,b,c,d,e,f...,許多不同的資料結構要打包在一起,那麼是不是需要專門為它們建立一個資料結構呢?
再假設這些資料結構變更的頻率很高,那麼是不是會需要花很多的時間去處理程式碼呢?

在這種情境下使用Tuple可以減省非常多的時間。 使用Tuple後的程式碼如下:

class App
{    
    public static void Main()
    {
            var store = new List<(double,double)>();            
            store.Add((0,1));
    }
}

第一個可以發現到程式碼明顯的縮短了不少。 再來假設我要增加不同的資料結構的話,如下:

class App
{    
    public static void Main()
    {
            var store = new List<(string,double,double,double)>();
            store.Add(("座標1",0,1,1.00));
    }
}

可以發現到要修改打包起來的資料組非常的快速。 如果要用建立資料結構的方式來做的話,會向下面這樣。

class App
{
    public struct Point
    {
        public Point(string name,double x, double y, double distance)
        {
            Name = name
            X = x;
            Y = y;
            Distance = distance;
        }
        public string Name { get; }
        public double X { get; }
        public double Y { get; }
        public double Distance { get; }
    }
    public static void Main()
    {
            var store = new List<Point>();
            var point =  new Point("座標1",0,1,1.00);
            store.Add(point);       
    }
}

當我要增加或刪減欄位時都需要先修改Struct,然後才能在底下同步輸入變數,而萬一我只有這一段程式碼需要修改資料結構而其他有使用到相同資料結構的程式碼不用,那麼就會遇到很大的麻煩了。

Last Updated:
Contributors: eisen