2009-12-04 21 views

Respuesta

15

Crear una estructura para almacenar sus valores:

struct ValuePair 
{ 
    public ulong Value1; 
    public ulong Value2; 
} 

Diccionario de inicialización:

Dictionary<int, ValuePair> dictionary = new Dictionary<int, ValuePair>(); 

Tal lista es suficiente, si se utiliza int como clave?

lista:

List<ValuePair> list = new List<ValuePair>(); 

ValuePair se puede añadir a la list de la siguiente manera:

list.Add(new ValuePair { Value1 = 1, Value2 = 2 }); 
+0

¿Cómo agregaré el valor en la lista? –

+1

@NosheenJaved list.Add (nuevo ValuePair {Value1 = 1, Value2 = 2}); – bniwredyc

+0

@bniwredyc Simple pero poderoso..Gracias –

0

tal vez tenga que definir una clase decir clase Pair para mantener sus dos valores, y usar int como la clave.

14

Puede declarar una clase que almacene ambos valores y luego use un diccionario común. Por ejemplo:

class Values { 
    ulong Value1 {get;set;} 
    ulong Value2 {get;set;} 
} 

var theDictionary=new Dictionary<int, Values>; 

theDictionary.Add(1, new Values {Value1=2, Value2=3}); 
+4

En su lugar, podría convertir Values ​​a struct. –

+2

Probablemente sería mejor usar KeyValuePair en lugar de una clase personalizada, o al menos usar una estructura. –

+1

Una estructura podría ahorrar algo de espacio y sería más idiomáticamente correcta, pero la diferencia es menor y no tan importante. –

9

Esta sería una opción:

Dictionary<int, KeyValuePair<ulong, ulong>> dictionary = new Dictionary<int, KeyValuePair<ulong, ulong>>(); 

Si desea agregar en un valor: Clave = 1, Par = {2,3}

dictionary.Add(1, new KeyValuePair<ulong, ulong>(2, 3)); 

Si desea recuperar esos valores:

var valuePair = dictionary[1]; 
ulong value1 = valuePair.Key; 
ulong value2 = valuePair.Value; 

O simplemente:

ulong value1 = dictionary[1].Key; 
+2

Prefiero el enfoque de Konamiman ya que es más limpio, pero esto funcionará sin una nueva clase. – naspinski

+0

, pero ¿cómo puedo inicializar los valores en él ... dar un código de búsqueda también :) – Royson

+0

Eso le daría dos claves y un valor. Si bien podría funcionar, sería confuso. – GraemeF

1

No estoy seguro de entender bien su pregunta, pero si desea almacenar más de un valor en la parte del valor del diccionario, se podría hacer algo como esto:

var dic = new Dictionary<int,KeyValuePair<ulong,ulong>>(); 

Usted puede usar inserto en el diccionario de la siguiente manera:

dic.Add(42, new KeyValuePair<ulong, ulong>(42, 42)); 
dic.Add(43, new KeyValuePair<ulong, ulong>(43, 43)); 

a buscar los valores de este modo:

foreach (var a in dic) 
{ 
    Console.WriteLine("Key: {0}, Value1: {1}, Value2: {2}", 
     a.Key, a.Value.Key, a.Value.Value); 
} 
+0

Semánticamente, un 'KeyValuePair' consta de una * clave * y un * valor *. El OP quiere almacenar * dos valores *, así que aunque un 'KeyValuePair' hará el truco, no es un gran ajuste" semántico ". – LukeH

+0

Correcto, pero aún preferiría esta solución para escribir una estructura personalizada para esta tarea específica. –

0

se puede hacer uso de la KeyValuePair

Dictionary<int, KeyValuePair<ulong,ulong>> vals = new Dictionary<int, KeyValuePair<ulong, ulong>>(); 
6

Crear una clase de tupla, en el espacio de nombres System:

public class Tuple<T1,T2> 
{ 
    private readonly T1 _item1; 
    private readonly T2 _item2; 

    public Tuple(T1 item1, T2 item2) 
    { 
     this._item1 = item1; 
     this._item2 = item2; 
    } 

    public T1 Item1 { get { return _item1; } } 

    public T2 Item2 { get { return _item2; } } 
} 

y una clase Tupla estático con un método Create para que pueda obtener la inferencia de tipos que no está disponible en constructores:

public static class Tuple 
{ 
    public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) 
    { 
     return new Tuple<T1, T2>(item1, item2); 
    } 
} 

Entonces , cuando ingresa a .NET 4.0, puede eliminar estas clases porque están en la Biblioteca de clases base (¡y son compatibles con tuplas F #!).

1

En C# 4, tendrá el tipo de Tuple para su valor, par de valores.

Hay un MSDN article que describe el tipo y las decisiones de diseño detrás de él.

Cuestiones relacionadas