C# | tupla – Part 6

La palabra Tuple significa «una estructura de datos que consta de múltiples partes». Entonces tuple es una estructura de datos que le brinda la forma más fácil de representar un conjunto de datos que tiene múltiples valores que pueden o no estar relacionados entre sí. Se introdujo en .NET Framework 4.0 . En tupla, puede agregar elementos del 1 al 8 . Si intenta agregar elementos mayores de ocho, el compilador arrojará un error. Las tuplas generalmente se usan cuando desea crear una estructura de datos que contiene objetos con sus propiedades y no desea crear un tipo separado para eso.

Características de las tuplas:

  • Nos permite representar múltiples datos en un solo conjunto de datos.
  • Nos permite crear, manipular y acceder a conjuntos de datos.
  • Devuelve múltiples valores de un método sin utilizar ningún parámetro .
  • También puede almacenar elementos duplicados.
  • Nos permite pasar múltiples valores a un método con la ayuda de parámetros individuales.

¿Cuál es la necesidad de las tuplas de C#?

Antes de las tuplas, tenemos tres formas de devolver más de un valor del método en C#, que son tipos de clase o estructura , parámetros de salida y tipos anónimos que se devuelven a través de un tipo de retorno dinámico . Pero después de las tuplas, se vuelve fácil representar un solo conjunto de datos.

Por otra razón, imagine un caso en el que desea almacenar los detalles de un Empleado en una sola entidad, como Nombre, EmpID, Grupo sanguíneo, Número de contacto. Ahora, la forma más común que viene a la mente es crear una estructura de datos que tome los campos requeridos. Aquí es donde entran en juego las tuplas. Con Tuples, no hay necesidad de crear ninguna estructura de datos separada. En cambio, para este caso, puede usar Tuple<T1, T2, T3, T4> .

Las estructuras de datos más comunes como Array, List, etc. son solo de un tipo específico y pueden almacenar infinitos elementos. Pero las tuplas pueden almacenar un número limitado de elementos, es decir, 8 y pueden ser de cualquier tipo.

Creando una tupla

En C#, hay principalmente 2 formas de crear la tupla que son las siguientes:

  • Usando el constructor de la clase Tuple: puede crear una tupla usando el constructor que proporciona la clase Tuple<T> . Donde puede almacenar elementos a partir de uno a ocho con su tipo. Pero no está permitido almacenar elementos mayores de ocho en una tupla. Si intenta hacerlo, el compilador arrojará un error.

    Sintaxis:

    // Constructor for single elements
    Tuple <T1>(T1)
    
    // Constructor for two elements
    Tuple <T1, T2>(T1, T2)
    .
    .
    .
     // Constructor for eight elements
    Tuple <T1, T2, T3, T4, T5, T6, T7, TRest>(T1, T2, T3, T4, T5, T6, T7, TRest)

    Ejemplo:

    // C# program to create tuple using tuple constructor.
    using System;
       
    public class GFG{
           
        // Main method
        static public void Main(){
               
            // Tuple with one element
        Tuple<string>My_Tuple1 = new Tuple<string>("GeeksforGeeks");
           
        // Tuple with three elements
        Tuple<string, string, int>My_Tuple2 = new Tuple<string, string, int>("Romil", "Python", 29);
           
        // Tuple with eight elements
        Tuple<int, int, int, int, int, int, int, Tuple<int>>My_Tuple3 = new Tuple<int, int, int, int, int, int, int, Tuple<int>>(1,2,3,4,5,6,7, new Tuple<int>(8));
        }
    }
  • Uso del método de creación: cuando usamos el constructor de tuplas para crear una tupla, debemos proporcionar el tipo de cada elemento almacenado en la tupla, lo que hace que su código sea engorroso. Entonces, C# proporciona otra clase que es la clase Tuple que contiene los métodos estáticos para crear un objeto tuple sin proporcionar el tipo de cada elemento.

    Sintaxis:

    // Method for 1-tuple
    Create(T1)
    
    // Method for 2-tuple
    Create(T1, T2)
    .
    .
    .
    // Method for 8-tuple
    Create(T1, T2, T3, T4, T5, T6, T7, T8)
    

    Ejemplo:

    // C# program to create tuple 
    // using Create Method
    using System;
      
    public class GFG {
      
        // Main method
        static public void Main()
        {
      
            // Creating 1-tuple
            // Using Create Method
            var My_Tuple1 = Tuple.Create("GeeksforGeeks");
      
            // Creating 4-tuple
            // Using Create Method
            var My_Tuple2 = Tuple.Create(12, 30, 40, 50);
      
            // Creating 8-tuple
            // Using Create Method
            var My_Tuple3 = Tuple.Create(13, "Geeks", 67, 
                          89.90, 'g', 39939, "geek", 10);
        }
    }
  • Accediendo a una Tupla

    Puede acceder a los elementos de una tupla usando la propiedad Item<elementNumber> , aquí elementNumber es de 1 a 7 como Item1, Item 2, Item3, Item4, Item5, Item6, Item 7, etc. y el último elemento de 8-tuple es accesible usando la propiedad Rest. Como se muestra en el siguiente ejemplo:

    Ejemplo:

    // C# program to access the tuple 
    // using Item and Rest property
    using System;
      
    public class GFG {
      
        // Main method
        static public void Main()
        {
      
            // Creating 1-tuple
            // Using Create Method
            var My_Tuple1 = Tuple.Create("GeeksforGeeks");
      
            // Accessing the element of Tuple
            // Using Item property
            Console.WriteLine("Element of My_Tuple1: " + My_Tuple1.Item1);
            Console.WriteLine();
      
            // Creating 4-tuple
            // Using Create Method
            var My_Tuple2 = Tuple.Create(12, 30, 40, 50);
      
            // Accessing the element of Tuple
            // Using Item property
            Console.WriteLine("Element of My_Tuple2: " + My_Tuple2.Item1);
            Console.WriteLine("Element of My_Tuple2: " + My_Tuple2.Item2);
            Console.WriteLine("Element of My_Tuple2: " + My_Tuple2.Item3);
            Console.WriteLine("Element of My_Tuple2: " + My_Tuple2.Item4);
            Console.WriteLine();
      
            // Creating 8-tuple
            // Using Create Method
            var My_Tuple3 = Tuple.Create(13, "Geeks",
                  67, 89.90, 'g', 39939, "geek", 10);
      
            // Accessing the element of Tuple
            // Using Item property
            // And print the 8th element of tuple
            // using Rest property
            Console.WriteLine("Element of My_Tuple3: " + My_Tuple3.Item1);
            Console.WriteLine("Element of My_Tuple3: " + My_Tuple3.Item2);
            Console.WriteLine("Element of My_Tuple3: " + My_Tuple3.Item3);
            Console.WriteLine("Element of My_Tuple3: " + My_Tuple3.Item4);
            Console.WriteLine("Element of My_Tuple3: " + My_Tuple3.Item5);
            Console.WriteLine("Element of My_Tuple3: " + My_Tuple3.Item6);
            Console.WriteLine("Element of My_Tuple3: " + My_Tuple3.Item7);
            Console.WriteLine("Element of My_Tuple3: " + My_Tuple3.Rest);
        }
    }

    Producción:

Element of My_Tuple1: GeeksforGeeks

Element of My_Tuple2: 12
Element of My_Tuple2: 30
Element of My_Tuple2: 40
Element of My_Tuple2: 50

Element of My_Tuple3: 13
Element of My_Tuple3: Geeks
Element of My_Tuple3: 67
Element of My_Tuple3: 89.9
Element of My_Tuple3: g
Element of My_Tuple3: 39939
Element of My_Tuple3: geek
Element of My_Tuple3: (10)

Tuplas anidadas

En C#, puede crear una tupla en otra tupla. Puede usar tuplas anidadas cuando desee agregar más de ocho elementos en la misma tupla. Se puede acceder a la tupla anidada usando la propiedad Rest como se muestra en el Ejemplo 1. Puede agregar una tupla anidada en cualquier parte de la secuencia, pero se recomienda que pueda colocar una tupla anidada al final de la secuencia para que puedan agregarse fácilmente. acceso desde la propiedad Resto. Si coloca una tupla anidada que no sea el último lugar, se podrá acceder a la tupla de acuerdo con la propiedad Item<elementNumber> como se muestra en el ejemplo 2.

Ejemplo 1:

// C# program to illustrate nested tuple
using System;
  
public class GFG{
      
        // Main method
    static public void Main ()
        {
          
           // Nested Tuple
        var My_Tuple = Tuple.Create(13, "Geeks", 67, 89.90,
                 'g', 39939, "geek", Tuple.Create(12, 30, 40, 50));
          
        // Accessing the element of Tuple
        // Using Item property
        // And accessing the elements of nested tuple
        // Using Rest property
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item1);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item2);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item3);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item4);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item5);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item6);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item7);
        Console.WriteLine("Element of Nested tuple: "+My_Tuple.Rest);
        Console.WriteLine("Element of Nested tuple: "+My_Tuple.Rest.Item1.Item1);
        Console.WriteLine("Element of Nested tuple: "+My_Tuple.Rest.Item1.Item2);
        Console.WriteLine("Element of Nested tuple: "+My_Tuple.Rest.Item1.Item3);
        Console.WriteLine("Element of Nested tuple: "+My_Tuple.Rest.Item1.Item4);
    }
}

Producción:

Element of My_Tuple: 13
Element of My_Tuple: Geeks
Element of My_Tuple: 67
Element of My_Tuple: 89.9
Element of My_Tuple: g 
Element of My_Tuple: 39939
Element of My_Tuple: geek
Element of Nested tuple: ((12, 30, 40, 50))
Element of Nested tuple: 12
Element of Nested tuple: 30
Element of Nested tuple: 40
Element of Nested tuple: 50

Ejemplo 2:

// C# program to illustrate nested tuple
using System;
  
public class GFG{
      
        // Main method
    static public void Main ()
        {
          
           // Nested Tuple
           // Here nested tuple is present 
               // at the place of 2nd element
        var My_Tuple = Tuple.Create(13, Tuple.Create(12, 30, 40,
                               50),67, 89.90, 'g', 39939, 123, "geeks");
          
        // Accessing the element of Tuple
        // Using Item property
        // And accessing the elements of 
        // nested tuple Using Rest property
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item1);
        Console.WriteLine("Element of Nested Tuple: "+My_Tuple.Item2.Item1);
        Console.WriteLine("Element of Nested Tuple: "+My_Tuple.Item2.Item2);
        Console.WriteLine("Element of Nested Tuple: "+My_Tuple.Item2.Item3);
        Console.WriteLine("Element of Nested Tuple: "+My_Tuple.Item2.Item4);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item3);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item4);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item5);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item6);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Item7);
        Console.WriteLine("Element of My_Tuple: "+My_Tuple.Rest);
          
    }
}

Producción:

Element of My_Tuple: 13
Element of Nested Tuple: 12
Element of Nested Tuple: 30
Element of Nested Tuple: 40
Element of Nested Tuple: 50
Element of My_Tuple: 67
Element of My_Tuple: 89.9
Element of My_Tuple: g
Element of My_Tuple: 39939
Element of My_Tuple: 123
Element of My_Tuple: (geeks)

Tupla como parámetro de método

En C#, puede pasar una tupla como parámetro de método, como se muestra en el siguiente ejemplo. Aquí pasamos una tupla llamada mytuple en el método PrintTheTuple() y se accede a los elementos de la tupla usando la propiedad Item<elementNumber>.

Ejemplo:

// C# program to illustrate the 
// tuple as a method parameter.
using System;
  
public class GFG{
      
        // Main method
    static public void Main ()
        {
          
            // Creating a tuple 
        var mytuple = Tuple.Create("GeeksforGeeks", 123, 90.8);
          
        // Pass the tuple in the
                // PrintTheTuple method
        PrintTheTuple(mytuple);
    }
  
    static void PrintTheTuple(Tuple<string, int, double>mytuple)
        {
        Console.WriteLine("Element: "+mytuple.Item1);
        Console.WriteLine("Element: "+mytuple.Item2);
        Console.WriteLine("Element: "+mytuple.Item3);
    }
}

Producción:

Element: GeeksforGeeks
Element: 123
Element: 90.8

Tupla como tipo de devolución

En C#, los métodos pueden usar tupla como tipo de devolución. O, en otras palabras, un método puede devolver una tupla como se muestra en el siguiente ejemplo:

Ejemplo:

// C# program to illustrate 
// how a method return tuple
using System;
  
public class GFG{
      
        // Main Method
    static public void Main ()
        {
            // Return tuple is stored in mytuple
        var mytuple = PrintTuple();
        Console.WriteLine(mytuple.Item1);
        Console.WriteLine(mytuple.Item2);
        Console.WriteLine(mytuple.Item3);
    }
      
    // PrintTuple method return a tuple 
    static Tuple<string, string, string>PrintTuple()
        {
        return Tuple.Create("Geeks", "For", "Geeks");
    }
}

Producción:

Geeks
For
Geeks

Limitación de tupla:

  • Es de tipo referencia no de tipo valor.
  • Está limitado a ocho elementos. Significa que no puede almacenar más de ocho elementos sin tupla anidada.
  • Solo se accede a estos mediante el uso de la propiedad Item<elementNumber> .

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *