キーのサブセットに基づいて、ディクショナリから多数の値を(リストに)選択する必要があります。
私はLinqを使用して1行のコードでこれを行おうとしていますが、これまでに発見したことは非常に長く不器用です。これを行うための最短(最もクリーンな)方法は何でしょうか?
これは私が今持っているものです(キーは文字列であり、keysToSelectは選択するキーのリストです):
List<ValueType> selectedValues = dictionary1.Where(x => keysToSelect.Contains(x.Key))
.ToDictionary<String, valueType>(x => x.Key,
x => x.Value)
.Values.ToList;
ありがとうございました。
さて、辞書の代わりにリストから始めることができます:
var selectedValues = keysToSelect.Where(dictionary1.ContainsKey)
.Select(x => dictionary1[x])
.ToList();
すべてのキーが辞書にあることが保証されている場合、最初のWhere
を省くことができます:
var selectedValues = keysToSelect.Select(x => dictionary1[x]).ToList();
このソリューションは、特に選択するキーのリストが辞書のサイズと比較して小さい場合、Dictionary.ContainsKey
はList.Contains
。
Dictionary<TKey,TValue>
はIEnumerable<KeyValuePair<TKey,TValue>>
なので、単純にSelect
Value
プロパティを使用できます。
List<ValueType> selectedValues = dictionary1
.Where(x => keysToSelect.Contains(x.Key))
.Select(x => x.Value)
.ToList();
または
var selectValues = (from keyValuePair in dictionary1
where keysToSelect.Contains(keyValuePair.Key)
select keyValuePair.Value).ToList()
選択するすべての値が辞書にあることがわかっている場合、辞書をループする代わりにキーをループすることができます。
List<ValueType> selectedValues = keysToSelect.Select(k => dictionary1[k]).ToList();