2017-06-28 4 views
0

Angenommen, Sie haben ein Excel-Blatt mit Land, Staat und Name. Ich möchte ein Wörterbuch erstellen, um alle Namen in seinen jeweiligen Staaten und alle Staaten in seinen Ländern zu gruppieren. HierC# Nested Dictionary von Excel

ist, was ich bisher getan haben:

//IMPORTANT SECTION 
var dictionary = 
    new Dictionary<string, Dictionary<string, Dictionary<string, HashSet<string>>>>(); 

//iterate over the rows and columns as it appears in the file 
//excel is not zero based!! 
for (int i = 1; i <= rowCount; i++) 
{ 
    //it would be nice if we add some null checking to these variables 
    //so, check the article 
    var country = xlRange.Cells[i, 1].Value2.ToString(); 
    var state = xlRange.Cells[i, 2].Value2.ToString(); 
    var name = xlRange.Cells[i, 3].Value2.ToString(); 

    if (!dictionary.ContainsKey(country)) 
    { 
     //var newList = new HashSet<string>(); 
     dictionary[country] = new Dictionary<string, Dictionary<string, HashSet<string>>>(); 
    } 

    if (!dictionary[country].ContainsKey(state)) 
    { 
     dictionary[country][state] = new Dictionary<string, HashSet<string>>(); 
    } 
} 

Ich bin nicht sicher, wie Namen, nachdem diese hinzuzufügen.

Muss ich die Zeichenfolge für eine Liste ersetzen?

+0

Statt ein Wörterbuch des Wörterbücher des Wörterbücher zu tun, Sie könnten versuchen, eine Klasse zu erstellen, die alle diese Werte halten und führen Sie einen Wörterbuch von . Auf diese Weise werden alle Daten in einem Objekt gespeichert und Sie haben kein Wörterbuch-Chaos. –

Antwort

1

Es sieht für mich aus, als ob Sie ein extra Wörterbuch drin haben. Ich denke, es sein sollte: Dictionary<countryName, Dictionary<stateName, HashSet<name>>():

var dictionary = new Dictionary<string, Dictionary<string, HashSet<string>>>(); 

for (int i = 1; i <= rowCount; i++) 
{ 
    var country = xlRange.Cells[i, 1].Value2.ToString(); 
    var state = xlRange.Cells[i, 2].Value2.ToString(); 
    var name = xlRange.Cells[i, 3].Value2.ToString(); 

    // Add this country if it doesn't exist 
    if (!dictionary.ContainsKey(country)) 
    { 
     dictionary.Add(country, new Dictionary<string, HashSet<string>>()); 
    } 

    // Add this state if it doesn't exist 
    if (!dictionary[country].ContainsKey(state)) 
    { 
     dictionary[country].Add(state, new HashSet<string>()); 
    } 

    // Add this name if it doesn't exist 
    if (!dictionary[country][state].Contains(name)) 
    { 
     dictionary[country][state].Add(name); 
    } 
} 
+0

Sie haben Recht. Ich habe tatsächlich mehr, also habe ich einen Fehler gemacht, als ich vereinfacht habe. Wenn ich es so mache, erhalte ich einen Fehler beim zweiten Namen, der demselben Land und demselben Staat hinzugefügt wird. Wie kann ich damit umgehen? – ranbo

+1

Ich verstehe nicht, was Sie mit * bedeuten "Wenn ich es so mache, erhalte ich einen Fehler beim zweiten Namen, der demselben Land und Staat hinzugefügt wird" * Der obige Code überprüft zuerst, ob ein Land, ein Staat oder Name existiert vor dem Versuch, es hinzuzufügen. Können Sie das Problem neu formulieren? –

+1

Hinweis: Aktualisierter Code zur Verwendung '.Add()' Methode anstelle von Index Zuweisung –