-2

私は c# で次のコードを持っています。基本的には、いくつかのキーとその値を持つ単純な辞書です。今、この辞書の既存のキーを新しいキーで更新したいと思います。出来ますか?

Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.Add("00", 2);
dictionary.Add("01", 1);
dictionary.Add("02", 0);
dictionary.Add("03", -1);

特定の条件では、キー 01 で値を削除しました。

次に、削除されたキーの下のキーを次のように更新する必要があります。

dictionary.Add("00", 2);   
dictionary.Add("01", 0);
dictionary.Add("02", -1);

出来ますか?

4

4 に答える 4

5

これは、辞書を完全に間違って使用していることを示しています。ディクショナリは、キーと値の間のマッピングです。「the」辞書(単語のあるもの)から単語を削除すると、すべての定義が 1 単語ずつ移動するわけではありません。

必要なことを行うには、リストを使用し、現在のキーの使用方法の代わりにインデックスを使用します。

var list = new List<int>();
list.Add(2);
list.Add(1);
list.Add(0);
list.Add(-1);
//...
list.RemoveAt(1);

リストは {index, value} になりました:{0, 2}, {1, 0}, {2, -1}

于 2012-08-07T06:33:09.203 に答える
1

そもそも、なぜ辞書を使うのですか?リストまたは配列を使用する必要があるようです。

于 2012-08-07T06:34:44.817 に答える
0

「AddOrUpdate」メソッドが必要です。

static class DictionaryExtensions
{
    public static void AddOrUpdate<TKey, TValue>(this IDictionary<TKey, TValue> dict, TKey key, TValue value)
    {
        if (dict.ContainsKey(key))
        {
            dict[key] = value;
        }
        else
        {
            dict.Add(key, value);
        }
    }
}

次に、次のように呼び出します。

Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary.AddOrUpdate("00", 2);
于 2012-08-07T06:33:37.330 に答える
0

それを行うことはできますが、キーを削除してから再度追加すると、同じ効果が得られます。ディクショナリはハッシュテーブルを使用して実装されているため、何らかの方法でキーを変更した場合は、エントリを再ハッシュする必要があります。

これは、あなたがそれを行う方法の拡張です(参照されているSOの質問に似ています):

public static UpdateKeyName<TKey, TValue>(Dictionary<TKey, TValue> dic this,
                                      TKey fromKey, TKey toKey)
{
  TValue value = dic[fromKey];
  dic.Remove(froKeym);
  dic[toKey] = value;
}

C# の辞書の詳細については、次の場所を参照してください。

于 2012-08-07T06:38:01.853 に答える