2016-07-26 3 views
0

создать словарьКак получить доступ значения с известным ключом от вложенного словаря

Dim north_dict As New Dictionary(Of String, Dictionary(Of String, String)) 

Внутри для каждого цикла я

Dim dict_north As New Dictionary(Of String, String) 

создать вложенный словарь для каждого ключа в north_dict

Каждый вложенный словарь имеет те же 35 клавиш примеры ключей y7x1, y7x2 ...

Без прокрутки через словарь, как я могу получить значения известных ключей из вложенных словарей?

Dim north_files() As String = Directory.GetFiles(txtbx_north_location.Text) 

For Each file As String In north_files 

    Dim dict_north As New Dictionary(Of String, String) 

    Dim reader_for_files As New StreamReader(file) 
    Dim allLines As List(Of String) = New List(Of String) 

    Do While Not reader_for_files.EndOfStream 
     allLines.Add(reader_for_files.ReadLine()) 
    Loop 

    reader_for_files.Close() 

    y7x1 = ReadLine(2, allLines) 
    dict_north.Add("y7x1", y7x1) 
    y7x2 = ReadLine(4, allLines) 
    dict_north.Add("y7x2", y7x2) 

    Dim result As String 
    result = Path.GetFileName(file) 
    north_dict.Add(result, dict_north) 

Следующая

таким образом, что

Dim sbuild As New StringBuilder 
For Each item As KeyValuePair(Of String, Dictionary(Of String, String)) In north_dict 
    sbuild.AppendLine(item.Key & ") " & item.Value.ToString) 
Next 
MessageBox.Show(sbuild.ToString) 

дает результаты, как

NORTH_COL_10ROW_1) System.Collections.Generic.Dictionary'2 [System.String, System.String] NORTH_COL_10ROW_10) System.Collections.Generic.Dictionary'2 [System.String, System.String]

Я хочу, чтобы получить значение, например, ключа y7x1 от NORTH_COL_4ROW_2

Я еще не знаю, добавляются ли вложенные словари успешно.

+0

Что-то вроде 'sbuild .AppendLine (item.Key & ")" & item.Value ("y7x1")) '? – Mark

+0

Спасибо, Марк, я просто учился. – Nasuno

+0

Это показывает, что мои словари работают. Теперь я должен выяснить, как обращаться к ним отдельно за пределами цикла. – Nasuno

ответ

0

Я работаю

Dim dictvalue As String = "" 
If north_dict("NORTH_COL_4ROW_2").TryGetValue("y7x1", dictvalue) Then 
    MessageBox.Show(dictvalue.ToString) 
End If 
0

Подумали об использовании linq? это будет sth. как это. Вот рабочий пример, все еще не уверен, правильно ли я понял ваш вопрос.

 For n = 1 To 100 

      Dim dict_north As New Dictionary(Of String, String) 

      For m = 1 To 35 
       dict_north.Add("y7x" & m.ToString(), "Value for y7x " & m.ToString()) 
      Next 

      north_dict.Add(n.ToString(), dict_north) 

     Next 

     Dim s = (From nd In north_dict 
       From dn In nd.Value 
       Where dn.Key = "y7x2" 
       Select nd.Key & " - " & dn.Value).ToList() 

     Debug.Print(String.Join(" ,", s.ToArray())) 

Результат 1 - Соотношение y7x 2, 2 - Значение для y7x 2, 3 - Значение для y7x 2 ...

Смежные вопросы