キー値(文字列型)が次のような辞書があります。
次のものを含むList(Of String)もあります。
リスト内の値がディクショナリアイテムのキーのサブストリングであるディクショナリ内のエントリを削除したい。
上記の例では、次のキーを持つエントリが辞書から削除されます。
複数のループを使用せずに、これらのエントリを辞書からフィルタリングして削除するにはどうすればよいですか?
これが私が試したサンプルコード/擬似コードです:
For Each whatKVP In whatDict
If IsSubstringFoundInAList(whatKVP.Key, listName) = True Then
listKeyDel.Add(whatKVP.Key)
End If
Next
For Each whatKey In listKeyDel
whatDict.Remove(whatKey)
Next
Private Function IsSubstringFoundInAList(ByVal strIp As String, ByVal listStr As List(Of String)) As Boolean
Dim whatStr As String
For Each whatStr In listStr
If strIp.Contains(whatStr) = True Then
Return True
End If
Next
Return False
End Function
上記のコードでは、タスクを完了するために多くの(3)ループを使用する必要があります。それを完了するためのより良い方法/より良いコードはありますか?
これは、1つのステートメントで実行できます。以下は、whatDict
が辞書でありlistName
、キーサブストリングのリストであることを前提としています。
whatDict = whatDict.Where(Function(kvp) Not listName.Any(Function(n) kvp.Key.Contains(n))) _
.ToDictionary(Function(kvp) kvp.Key, Function(kvp) kvp.Value)
これにより、既存のディクショナリのKeyValuePairsのみを含む新しいディクショナリが作成されます。このディクショナリでは、キーにのサブ文字列は含まれていませんlistName
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加