Estoy interesado: ¿Cuál es el análogo de std::pair
C # en C ++? Encontré System.Web.UI.Pair
clase, pero preferiría algo basado en plantillas.
¡Gracias!
c#
.net
data-structures
std-pair
base-class-library
Alexander Prokofyev
fuente
fuente
Respuestas:
Las tuplas están disponibles desde .NET4.0 y admiten genéricos:
En versiones anteriores puede usar
System.Collections.Generic.KeyValuePair<K, V>
o una solución como la siguiente:Y úsalo así:
Esto produce:
O incluso este par encadenado:
Eso da salida:
fuente
Tuple
. Por lo tanto, puede decirTuple.Create("Hello", 4)
cuál es un poco más fácil quenew Tuple<string, int>("Hello", 4)
. (Por cierto, .NET4.0 ya está aquí desde 2010.)Tuple<>
implementa una semántica sólidaEquals
yGetHashCode
con valor, lo cual es genial. Tenga en cuenta al implementar sus propias tuplas.System.Web.UI
contenía laPair
clase porque se usaba mucho en ASP.NET 1.1 como una estructura ViewState interna.Actualización de agosto de 2017: C # 7.0 / .NET Framework 4.7 proporciona una sintaxis para declarar una Tupla con elementos con nombre utilizando la
System.ValueTuple
estructura.ver MSDN para más ejemplos de sintaxis.
Actualización de junio de 2012:
Tuples
forma parte de .NET desde la versión 4.0.Aquí hay un artículo anterior que describe la inclusión en .NET4.0 y el soporte para genéricos:
fuente
tuple.Item1 = 4;
Lamentablemente, no hay ninguno. Puede usar el
System.Collections.Generic.KeyValuePair<K, V>
en muchas situaciones.Alternativamente, puede usar tipos anónimos para manejar tuplas, al menos localmente:
La última alternativa es crear una clase propia.
fuente
C # tiene tuplas a partir de la versión 4.0.
fuente
Algunas respuestas parecen simplemente incorrectas
Aquí está mi clase de pareja
Aquí hay un código de prueba:
fuente
Si se trata de diccionarios y similares, está buscando System.Collections.Generic.KeyValuePair <TKey, TValue>.
fuente
Dependiendo de lo que desee lograr, es posible que desee probar KeyValuePair .
El hecho de que no pueda cambiar la clave de una entrada puede, por supuesto, rectificarse simplemente reemplazando la entrada completa por una nueva instancia de KeyValuePair.
fuente
Creé una implementación C # de Tuples, que resuelve el problema genéricamente entre dos y cinco valores: aquí está la publicación del blog , que contiene un enlace a la fuente.
fuente
Estaba haciendo la misma pregunta justo ahora, después de un rápido google, descubrí que hay una clase de pares en .NET, excepto que está en System.Web.UI ^ ~ ^ (http://msdn.microsoft.com/en-us/library/system.web.ui.pair.aspx ) Dios sabe por qué lo pusieron allí en lugar del marco de colecciones
fuente
Desde .NET 4.0 tienes
System.Tuple<T1, T2>
clase:fuente
Normalmente extiendo la
Tuple
clase a mi propio contenedor genérico de la siguiente manera:y úsalo así:
fuente
Para que funcione lo anterior (necesitaba un par como clave de un diccionario). Tuve que agregar:
y una vez que hice eso también agregué
para suprimir una advertencia del compilador.
fuente
La biblioteca PowerCollections (anteriormente disponible en Wintellect pero ahora alojada en Codeplex @ http://powercollections.codeplex.com ) tiene una estructura genérica de pares.
fuente
Además de la clase personalizada o .Net 4.0 Tuples, desde C # 7.0 hay una nueva característica llamada ValueTuple, que es una estructura que se puede utilizar en este caso. En lugar de escribir:
y acceder a los valores a través de
t.Item1
yt.Item2
, simplemente puede hacerlo así:o incluso:
fuente