2017-06-28 25 views
0

国、州、および名前のExcelシートがあるとします。私は、その尊重国とすべての州の下にあるすべての名前をその国にグループ化するための辞書を作成したいと考えています。C#Excelのネストされた辞書

//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>>(); 
    } 
} 

を、私はこの後に名前を追加するかどうかはわからない。ここで

は、私がこれまで行っているものです。

リストの文字列を置き換える必要がありますか?

+0

代わりに辞書の辞書の辞書を行うので、あなたはそれらのすべての値を保持するクラスを作成しようとすると、<文字列、YOURCLASS>のいずれかの辞書を行うことができ、私はそれがあるべきだと思います。この方法では、すべてのデータが1つのオブジェクトに保存され、辞書の混乱はありません。 –

答えて

1

あなたに余分な辞書があるように見えます。 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

あなたは正しいです。私は実際にもっと多く持っているので、単純化するときに間違いを犯しました。そのようにすると、同じ国と州に追加された2番目の名前に誤りが発生します。どうすればそれに対処できますか? – ranbo

+1

私はあなたが何を意味するのか理解していません* "私はそれをやると、同じ国と州に追加された2番目の名前に誤りがある" *上記のコードは、国、名前を追加しようとする前に存在します。問題の言い換えをすることはできますか? –

+1

注:インデックス割り当ての代わりに '.Add()'メソッドを使用するコードを更新しました –

関連する問題