2016-06-15 2 views
0

У меня есть два словаря:Извлечь часть ключа в словаре

  • file1 словарь: "abcd.0001" 1
  • file2 словарь: "abcd.0002" 1 «DEFG. 0001 "1

Я хочу узнать, существует ли ключ, содержащий« abcd ». Я не могу жестко закодировать «abcd». Следующий код обеспечивает вывод «abcd.0001 удаляется в новом файле», это правда, но я хочу, чтобы код искал только часть ключа, и если он есть в обоих файлах, он не должен писать выход.

Спасибо!

For Each kvp As KeyValuePair(Of String, Integer) In file1dictionary 
     If file2dictionary.ContainsKey(kvp.Key) Then 
     Else 
      objStreamWriter.WriteLine(kvp.Value.ToString() + " entries of " + kvp.Key + " DELETED in new PDI") 
     End If 
    Next 

ответ

0

EDITED

Это должно сделать то, что вы хотите:

Private Sub Test() 
    Dim file1dictionary As New Dictionary(Of String, Integer), file2dictionary As New Dictionary(Of String, Integer) 
    file1dictionary("abcd.0001") = 1 
    file2dictionary("abcd.0002") = 1 
    file2dictionary("defg.0001") = 1 
    Dim correspondences As Integer 
    For Each kvp1 As KeyValuePair(Of String, Integer) In file1dictionary 
     correspondences = file2dictionary.ToArray.Count(
      Function(kvp2) kvp2.Key.StartsWith(kvp1.Key.Substring(0, kvp1.Key.IndexOf("."c)))) 
     If correspondences > 0 Then 
      'nothing done in this case 
     Else 
      MsgBox(kvp1.Value.ToString() + " entries of " + kvp1.Key + " DELETED in new PDI") 
     End If 
    Next 
End Sub 

Но я бы закодировать это так, для краткости:

For Each kvp In file1dictionary.Where(
      Function(kvp1) file2dictionary.ToArray.Any(
       Function(kvp2) kvp2.Key.StartsWith(kvp1.Key.Substring(0, kvp1.Key.IndexOf("."c))))) 
     objStreamWriter.WriteLine(kvp.Value.ToString() + " entries Of " + kvp.Key + " DELETED In New PDI") 
    Next 
+0

привет: это дает вывод «abcd.0001» удаляется в файле 2. Я не хочу этого. –

+0

Я не хочу, чтобы код печатал что-либо, если abcd содержится в обоих файлах. –

+0

Для каждого KVP As KeyValuePair (Of String, Integer) В file1dictionary PNstart = kvp.Key.IndexOf ("" "") PNEnd = kvp.Key.IndexOf ("") «If file2dictionary.ContainsKey (KVP. Key) Затем Если файл2dictionary.Any (функция (kvp2) kvp2.Key.StartsWith (kvp.Key.Substring (PNstart + 1, PNEnd - PNstart - 1))) Затем Else objStreamWriter.WriteLine (kvp.Value.ToString() + "записи из" + kvp.Key + "DELETED In New PDI") End If Next –

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