次のような配列があります-
arr[0] = "Name";
arr[1] = "Address";
arr[2] = "Phone";
...
配列値がディクショナリキーになり、ディクショナリ値がインデックスになるようにDictionary<string, int>
を作成し、O(1)
で名前をクエリして列のインデックスを取得できるようにします。 。これはかなり単純なはずですが、頭を悩ますことはできません。
私は試した -
Dictionary<string, int> myDict = arr.ToDictionary(x => x, x => indexOf(x))
ただし、これは戻ります-
{(Name, 0), (Address, 0), (Phone, 0),...}
私はこれが最初の発生のインデックスを保存しているために起こることを知っていますが、それは私がやろうとしていることではありません。
インデックスを含むSelect
のオーバーロードを使用できます。
var dictionary = array.Select((value, index) => new { value, index })
.ToDictionary(pair => pair.value, pair => pair.index);
またはEnumerable.Range
:
var dictionary = Enumerable.Range(0, array.Length).ToDictionary(x => array[x]);
2つの等しいキーを提供しようとすると、ToDictionary
は例外をスローすることに注意してください。配列に2つの等しい値がある可能性と、その状況で何をしたいのかを慎重に検討する必要があります。
私はただ手動でそれをやろうと思っています:
var dictionary = new Dictionary<string, int>();
for (int i = 0; i < array.Length; i++)
{
dictionary[array[i]] = i;
}
別の方法は次のとおりです。
var dictionary = arr.ToDictionary(x => Array.IndexOf(arr, x));