2010-03-15 4 views
1

J'essaie de créer une variable dictionnaire imbriquée comme ci-dessous, mais je reçois une erreur de compilation indiquant qu'elle a besoin de "}" à la ligne où j'ajoute des éléments (ligne 2) à mon imbriqué dictionnaire.Erreur de compilation lors de l'ajout d'éléments au dictionnaire imbriqué

Que manque-t-il ici? Merci.

Dim myNestedDictionary As Dictionary(Of String, Dictionary(Of String, Integer)) = New Dictionary(Of String, Dictionary(Of String, Integer))() 


myNestedDictionary.Add("A", New Dictionary("A", 4)()) 

Répondre

1

Dans VS 2008 et .net 3.5 vous ne peut pas déclarer et initialiser un dictionnaire dans une ligne, donc vous devez faire:

Dim myNestedDictionary As New Dictionary(Of String, Dictionary(Of String, Integer))() 
Dim lTempDict As New Dictionary(Of String, Integer) 
lTempDict.Add("A", 4) 
myNestedDictionary.Add("A", lTempDict) 

pour récupérer l'un élément utilisez ce qui suit:

Dim lDictionaryForA As Dictionary(Of String, Integer) = myNestedDictionary.Item("A") 
Dim lValueForA As Integer = lDictionaryForA.Item("A") 

La valeur lValueForA doit être 4.

+0

Merci pour votre réponse. J'ai été capable de me débarrasser de l'erreur. Pouvez-vous suggérer quelque chose pour récupérer des valeurs de ce dictionnaire imbriqué, par exemple je veux obtenir quelle est la valeur de correspondance pour A et A, qui est de 4 dans ce cas. Pour le cas ci-dessous, ce sera ce qui correspond à la valeur de A et r, qui est -1. lTempDict.Add ("R", -1) myNestedDictionary.Add ("A", lTempDict) – anshu

+0

J'utilise VS 2008 – anshu

+0

J'ai modifié la publication pour illustrer comment récupérer également un élément. J'espère que cela clarifie les choses pour vous. – Ando

1

Vous devez spécifier le type de dictionnaire que vous créez lorsque vous ajoutez les enregistrements:

myNestedDictionary.Add("A", New Dictionary(Of String, Integer)) 

ou autrement passer un dictionnaire existant (de chaîne, entier) comme argument à l'intérieur d'un dictionnaire (lors de l'ajout de paires clé/valeur au dictionnaire externe).

(BTW, votre dictionnaire externe est un dictionnaire qui est clés sont des chaînes et valeurs sont des dictionnaires (Of String, Integer), est-ce vraiment ce que tu voulais?)

+0

Je suis en train de stocker la valeur comme BLOSSUM62 (je ne peux pas coller la matrice ici), de sorte que lors de ma mise en œuvre du code que je peux obtenir des valeurs telles que: [A, A] = 4, [A, R] = - 1, [A, N] = -2, [A, D] = -2, [A, C] = 0, [A, Q] = -1 [R, A] = 1, [R, R] = 5 et ainsi de suite. ------------ – anshu

+0

Il existe plusieurs façons de l'implémenter, ce qui peut s'avérer être une meilleure solution que le dictionnaire imbriqué. Cela sort un peu du cadre de cette question, vous pouvez envisager d'afficher une nouvelle question qui concerne ce que vous essayez d'atteindre (plutôt que vos tentatives de mise en œuvre). –

+0

Merci M.A. Hanin. Je vais poster une nouvelle question. – anshu

1

En C#, vous pouvez le faire:

var myNestedDictionary = new Dictionary<string, Dictionary<string, int>>() {{ "A", new Dictionary<string, int>() { { "A", 4 } } }}; 

Vous pouvez le faire en VB 2010 et, en utilisant le mot-clé A partir, mais il ne compile pas VS 2008. Il sera compilé dans VB 2010, quel que soit le .NET Framework que vous ciblez. J'ai essayé 2.0, 3.5 et 4.0.

Dim myNestedDictionary = New Dictionary(Of String, Dictionary(Of String, Integer))() From {{"A", New Dictionary(Of String, Integer) From {{"A", 4}}}} 
Questions connexes