0

キー/インデックスでアクセスできるが実装できないハッシュテーブルまたはその他の配列に追加したい文字列値のリストがあります。私はこれが私が望むように機能していますが、それは醜いです

        List<string> valueList = new List<string>();
        valueList.Add("1");
        valueList.Add("2");
        valueList.Add("3");

        Hashtable p = new Hashtable();


        valueList.ForEach(delegate(string f) { p.Add(valueList.FindIndex(v => v == f), f); });

編集:ジェームズがリストがインデックスによって値を返すことを思い出させた後、リストを使用しましたが、これが最終的な結果です

valueList.ForEach(f => sequenceList.Add(int.Parse(f)));
4

5 に答える 5

4

コンパイルしても機能しません。最初の項目の前に新しいイテレータが配置されるため、呼び出しGetEnumerator().Currentは常に失敗します。

各アイテムのキーは何にしますか?それがリスト内のその位置だけである場合、リスト(すでにインデックスが付けられている)よりも優れているとは思えませんint。ただし、このように行うことができます(それvalueListList<string>:であると仮定します)

var dictionary = valueList.Select((item, index) => new { item, index })
                          .ToDictionary(x => x.index, x => x.item);

それを既存の辞書に追加すると、次のようになります。

for (int i=0; i < valueList.Count; i++)
{
    dictionary[i] = valueList[i];
}

すべてがラムダで行われる必要はありません:)

FindIndex値を繰り返した場合、これは使用した場合とまったく同じ効果がないことに注意してください。

于 2009-07-06T15:12:33.283 に答える
1

文字列をキーにし、インデックスを値にしたい場合は、次のようにします。

Hashtable ht = new Hashtable();

for (var i = 0; i <= valueList.Count; i++)
{
    ht.Add(valueList[i], i);
}

それ以外の場合は、ht.Addパラメーターを切り替えます。ただし、その場合は、リスト<文字列>のままにしておくのが最善です。

于 2009-07-06T15:11:22.367 に答える
1

これを試して:

valueList.ForEach(x => htable.Add(valueList.FindIndex(y => y == x), x));

ただし、ここでa を使用しない理由はありません。for

for (var index = 0; index < valueList.Count; index++)
{
    htable.Add(index, valueList[index]);
}

indexコードの行数は増えますが、より簡単で、パフォーマンスが大幅に向上します (findIndex は、for ステートメントの fromを使用するよりもはるかに効率的ではありません)。

于 2009-07-06T15:16:31.063 に答える
0
List<string> list = new List<string>{"w", "y", "u", "i", "n"};

HashSet<string> hset = new HashSet<string>(list);
于 2009-07-06T15:11:44.220 に答える
0

これに ForEach を使用するのは効率的ではありません。FindIndex を使用して自分がどこにいるかを調べる必要があるからです。それは機能しますが、多くの余分な作業を行うことになります:

valueList.ForEach(x => htable.Add(valueList.FindIndex(y => y == x), x));

テーブルをシークせずにインデックスを取得できるように、通常のループを使用することをお勧めします。

for (int i = 0; i < valueList.Count; i++) {
   htable.Add(i, valueList[i]);
}
于 2009-07-06T15:21:16.390 に答える