2009-12-04 11 views

risposta

15

Creare una struttura per memorizzare i valori:

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

inizializzazione Dizionario:

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

Forse List è sufficiente, se si utilizza int come chiave?

listino:

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

ValuePair possono essere aggiunti alla list come segue:

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

Come aggiungo il valore alla lista? –

+1

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

+0

@bniwredyc Semplice ma potente ... grazie –

0

forse si deve definire una classe dire classe Coppia per contenere il valore due e usare int come chiave.

14

È possibile dichiarare una classe che memorizza entrambi i valori e quindi utilizzare un dizionario normale. Per esempio:

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

È possibile creare valori in una struct. –

+2

Probabilmente sarebbe meglio usare KeyValuePair invece di una classe personalizzata, o almeno usare una struct. –

+1

Una struttura potrebbe dare un risparmio di spazio e sarebbe più idiomaticamente corretta, ma la differenza è minore e non così importante. –

9

Ciò sarebbe un'opzione:

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

Se si desidera aggiungere un valore: Tasto = 1, Paio = {2,3}

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

Se si desidera recuperare tali valori:

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

O semplicemente:

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

Preferisco l'approccio di Konamiman perché è più pulito, ma questo farà senza una nuova classe. – naspinski

+0

ma come faccio ad inizializzare i valori ad esso ... anche qualche codice di recupero :) – Royson

+0

Questo darebbe due chiavi e un valore. Mentre potrebbe funzionare, sarebbe fonte di confusione. – GraemeF

1

io non sono sicuro di aver capito la tua domanda in modo corretto, ma se si desidera memorizzare più di un valore nella parte di valore di dizionario, si potrebbe fare qualcosa di simile:

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

È può usare inserto nella dizionario come questo:

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

E recuperare i valori in questo modo:

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

Semanticamente, un 'KeyValuePair' consiste in un * tasto * e un * valore *. L'OP vuole memorizzare * due valori *, quindi anche se un 'KeyValuePair' farà il trucco non è un grande adattamento" semantico ". – LukeH

+0

Giusto, ma preferirei comunque questa soluzione per scrivere una struttura personalizzata per questa specifica attività. –

0

si può fare uso del KeyValuePair

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

Creare una classe Tuple, nel namespace 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; } } 
} 

e una classe Tuple statica con un metodo Create in modo da ottenere l'inferenza dei tipi che non è disponibile sul costruttori:

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

Poi , quando si accede a .NET 4.0, è possibile eliminare queste classi perché sono nella libreria di classi base (e sono compatibili con le tuple F #!).

1

In C# 4, avrai il tipo Tupla per il tuo valore, coppia di valori.

C'è un MSDN article che descrive il tipo e le decisioni di progettazione dietro di esso.

Problemi correlati