Tuple<T1,T2> Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa una tupla de 2 o par.
generic <typename T1, typename T2>
public ref class Tuple : IComparable, System::Collections::IStructuralComparable, System::Collections::IStructuralEquatable
generic <typename T1, typename T2>
public ref class Tuple : IComparable, System::Collections::IStructuralComparable, System::Collections::IStructuralEquatable, System::Runtime::CompilerServices::ITuple
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable, System.Runtime.CompilerServices.ITuple
[System.Serializable]
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable
type Tuple<'T1, 'T2> = class
interface IStructuralComparable
interface IStructuralEquatable
interface IComparable
type Tuple<'T1, 'T2> = class
interface IStructuralComparable
interface IStructuralEquatable
interface IComparable
interface ITuple
[<System.Serializable>]
type Tuple<'T1, 'T2> = class
interface IStructuralEquatable
interface IStructuralComparable
interface IComparable
[<System.Serializable>]
type Tuple<'T1, 'T2> = class
interface IStructuralEquatable
interface IStructuralComparable
interface IComparable
interface ITuple
Public Class Tuple(Of T1, T2)
Implements IComparable, IStructuralComparable, IStructuralEquatable
Public Class Tuple(Of T1, T2)
Implements IComparable, IStructuralComparable, IStructuralEquatable, ITuple
Parámetros de tipo
- T1
Tipo del primer componente de la tupla.
- T2
Tipo del segundo componente de la tupla.
- Herencia
-
Tuple<T1,T2>
- Atributos
- Implementaciones
Comentarios
Una tupla es una estructura de datos que tiene un número específico y una secuencia de valores. La Tuple<T1,T2> clase representa una tupla de 2 o un par, que es una tupla que tiene dos componentes. Una tupla de 2 es similar a una KeyValuePair<TKey,TValue> estructura.
Puede crear una instancia de un Tuple<T1,T2> objeto llamando al Tuple<T1,T2> constructor o al método estático Tuple.Create<T1,T2>(T1, T2) . Puede recuperar los valores de los componentes de la tupla mediante las propiedades de solo lectura Item1 y Item2 de instancia.
Las tuplas se usan normalmente de cuatro maneras diferentes:
Para representar un único conjunto de datos. Por ejemplo, una tupla puede representar un registro en una base de datos y sus componentes pueden representar los campos de ese registro.
Para proporcionar un acceso sencillo y la manipulación de un conjunto de datos. En el ejemplo siguiente se define una matriz de Tuple<T1,T2> objetos que contienen los nombres de los alumnos y sus puntuaciones de prueba correspondientes. A continuación, itera la matriz para calcular la puntuación media de la prueba.
using System; public class Example { public static void Main() { Tuple<string, Nullable<int>>[] scores = { new Tuple<string, Nullable<int>>("Jack", 78), new Tuple<string, Nullable<int>>("Abbey", 92), new Tuple<string, Nullable<int>>("Dave", 88), new Tuple<string, Nullable<int>>("Sam", 91), new Tuple<string, Nullable<int>>("Ed", null), new Tuple<string, Nullable<int>>("Penelope", 82), new Tuple<string, Nullable<int>>("Linda", 99), new Tuple<string, Nullable<int>>("Judith", 84) }; int number; double mean = ComputeMean(scores, out number); Console.WriteLine("Average test score: {0:N2} (n={1})", mean, number); } private static double ComputeMean(Tuple<string, Nullable<int>>[] scores, out int n) { n = 0; int sum = 0; foreach (var score in scores) { if (score.Item2.HasValue) { n += 1; sum += score.Item2.Value; } } if (n > 0) return sum / (double) n; else return 0; } } // The example displays the following output: // Average test score: 87.71 (n=7)
open System let scores = [| Tuple<string, Nullable<int>>("Jack", 78) Tuple<string, Nullable<int>>("Abbey", 92) Tuple<string, Nullable<int>>("Dave", 88) Tuple<string, Nullable<int>>("Sam", 91) Tuple<string, Nullable<int>>("Ed", Nullable()) Tuple<string, Nullable<int>>("Penelope", 82) Tuple<string, Nullable<int>>("Linda", 99) Tuple<string, Nullable<int>>("Judith", 84) |] let computeMean (scores: Tuple<string, Nullable<int>>[]) (n: int outref) = n <- 0 let mutable sum = 0 for _, score in scores do if score.HasValue then n <- n + 1 sum <- sum + score.Value if n > 0 then double sum / double n else 0 let mutable number = 0 let mean = computeMean scores &number printfn $"Average test score: {mean:N2} (n={number})" // The example displays the following output: // Average test score: 87.71 (n=7)
Module Example Public Sub Main() Dim scores() As Tuple(Of String, Nullable(Of Integer)) = { New Tuple(Of String, Nullable(Of Integer))("Jack", 78), New Tuple(Of String, Nullable(Of Integer))("Abbey", 92), New Tuple(Of String, Nullable(Of Integer))("Dave", 88), New Tuple(Of String, Nullable(Of Integer))("Sam", 91), New Tuple(Of String, Nullable(Of Integer))("Ed", Nothing), New Tuple(Of String, Nullable(Of Integer))("Penelope", 82), New Tuple(Of String, Nullable(Of Integer))("Linda", 99), New Tuple(Of String, Nullable(Of Integer))("Judith", 84) } Dim number As Integer Dim mean As Double = ComputeMean(scores, number) Console.WriteLine("Average test score: {0:N2} (n={1})", mean, number) End Sub Private Function ComputeMean(scores() As Tuple(Of String, Nullable(Of Integer)), ByRef n As Integer) As Double n = 0 Dim sum As Integer For Each score In scores If score.Item2.HasValue Then n += 1 sum += score.Item2.Value End If Next If n > 0 Then Return sum / n Else Return 0 End If End Function End Module ' The example displays the following output: ' Average test score: 87.71 (n=7)
Para devolver varios valores de un método sin el uso de
out
parámetros (en C#) oByRef
parámetros (en Visual Basic). Por ejemplo, en el ejemplo siguiente se usa un Tuple<T1,T2> objeto para devolver el cociente y el resto resultante de la división de enteros.using System; public class Class1 { public static void Main() { int dividend, divisor; Tuple<int, int> result; dividend = 136945; divisor = 178; result = IntegerDivide(dividend, divisor); if (result != null) Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}", dividend, divisor, result.Item1, result.Item2); else Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor); dividend = Int32.MaxValue; divisor = -2073; result = IntegerDivide(dividend, divisor); if (result != null) Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}", dividend, divisor, result.Item1, result.Item2); else Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor); } private static Tuple<int, int> IntegerDivide(int dividend, int divisor) { try { int remainder; int quotient = Math.DivRem(dividend, divisor, out remainder); return new Tuple<int, int>(quotient, remainder); } catch (DivideByZeroException) { return null; } } } // The example displays the following output: // 136945 \ 178 = 769, remainder 63 // 2147483647 \ -2073 = -1035930, remainder 757
open System let integerDivide (dividend: int) divisor = try let quotient, remainder = Math.DivRem(dividend, divisor) Tuple<int, int>(quotient, remainder) with :? DivideByZeroException -> Unchecked.defaultof<Tuple<int, int>> [<EntryPoint>] let main _ = let dividend = 136945 let divisor = 178 let result = integerDivide dividend divisor if box result <> null then printfn $@"{dividend} \ {divisor} = {result.Item1}, remainder {result.Item2}" else printfn $@"{dividend} \ {divisor} = <Error>" let dividend = Int32.MaxValue let divisor = -2073 let result = integerDivide dividend divisor if box result <> null then printfn $@"{dividend} \ {divisor} = {result.Item1}, remainder {result.Item2}" else printfn $@"{dividend} \ {divisor} = <Error>" 0 // The example displays the following output: // 136945 \ 178 = 769, remainder 63 // 2147483647 \ -2073 = -1035930, remainder 757
Module modMain Public Sub Main() Dim dividend, divisor As Integer Dim result As Tuple(Of Integer, Integer) dividend = 136945 : divisor = 178 result = IntegerDivide(dividend, divisor) If result IsNot Nothing Then Console.WriteLine("{0} \ {1} = {2}, remainder {3}", dividend, divisor, result.Item1, result.Item2) Else Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor) End If dividend = Int32.MaxValue : divisor = -2073 result = IntegerDivide(dividend, divisor) If result IsNot Nothing Then Console.WriteLine("{0} \ {1} = {2}, remainder {3}", dividend, divisor, result.Item1, result.Item2) Else Console.WriteLine("{0} \ {1} = <Error>", dividend, divisor) End If End Sub Private Function IntegerDivide(dividend As Integer, divisor As Integer) As Tuple(Of Integer, Integer) Try Dim remainder As Integer Dim quotient As Integer = Math.DivRem(dividend, divisor, remainder) Return New Tuple(Of Integer, Integer)(quotient, remainder) Catch e As DivideByZeroException Return Nothing End Try End Function End Module ' The example displays the following output: ' 136945 \ 178 = 769, remainder 63 ' 2147483647 \ -2073 = -1035930, remainder 757
Para pasar varios valores a un método a través de un único parámetro. Por ejemplo, el Thread.Start(Object) método tiene un único parámetro que permite proporcionar un valor al método que ejecuta el subproceso en el inicio. Si proporciona un Tuple<T1,T2> objeto como argumento de método, puede proporcionar la rutina de inicio del subproceso con dos elementos de datos.
Constructores
Tuple<T1,T2>(T1, T2) |
Inicializa una nueva instancia de la clase Tuple<T1,T2>. |
Propiedades
Item1 |
Obtiene el valor del primer componente del objeto Tuple<T1,T2> actual. |
Item2 |
Obtiene el valor del segundo componente del objeto Tuple<T1,T2> actual. |
Métodos
Equals(Object) |
Devuelve un valor que indica si el objeto Tuple<T1,T2> actual es igual que el objeto especificado. |
GetHashCode() |
Devuelve el código hash del objeto Tuple<T1,T2> actual. |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ToString() |
Devuelve una cadena que representa el valor de esta instancia de Tuple<T1,T2>. |
Implementaciones de interfaz explícitas
IComparable.CompareTo(Object) |
Compara el objeto Tuple<T1,T2> actual con un objeto especificado y devuelve un entero que indica si el objeto actual es anterior, posterior o está en la misma posición que el objeto especificado en el criterio de ordenación. |
IStructuralComparable.CompareTo(Object, IComparer) |
Compara el objeto Tuple<T1,T2> actual con un objeto especificado utilizando un comparador especificado y devuelve un entero que indica si el objeto actual precede o sigue al objeto especificado, o si se encuentra en la misma posición que dicho objeto en el criterio de ordenación. |
IStructuralEquatable.Equals(Object, IEqualityComparer) |
Devuelve un valor que indica si el objeto Tuple<T1,T2> actual es igual que el objeto especificado según el método de comparación especificado. |
IStructuralEquatable.GetHashCode(IEqualityComparer) |
Calcula el código hash del objeto Tuple<T1,T2> actual usando el método de cálculo especificado. |
ITuple.Item[Int32] |
Obtiene el valor del elemento |
ITuple.Length |
Obtiene el número de elementos de |
Métodos de extensión
Deconstruct<T1,T2>(Tuple<T1,T2>, T1, T2) |
Deconstruye una tupla con dos elementos en variables independientes. |
ToValueTuple<T1,T2>(Tuple<T1,T2>) |
Convierte una instancia de la clase |