2017-02-04 9 views
1

私はDICTIONARY<STRING,STRING>という形式の辞書を持っており、その中に5つの要素の値があります。私が必要とする出力は、辞書に新しい要素を格納したい場合、自動的に最後の要素の前の位置に格納されます。どうやってやるの?Cの辞書のN番目の位置に値を格納

+5

ディクショナリでは、その要素の順序は定義されていません。あなたの実際の目標が何であるかを明確にし、希望する出力を持つサンプルを表示するための投稿を歓迎します。 –

+0

http:// stackoverflowを参照できます。Dictionaryが内部でどのように定義されているかを知るために、この質問が内部的に保持されているhow-the-the-the-questions/1600606あなたの目標について言えば、代替の解決策があるかもしれません。辞書はいかなる命令をも意図していない。 – Vijay

+0

[KeyedCollection ](https://msdn.microsoft.com/en-us/library/ms132438(v = vs.110).aspx)は、必要な処理を行う可能性があります。 – Joe

答えて

1

あなたは簡単にこのように任意の項目を編集することがあります。

Dictionary<string,string> dic = new Dictionary<string,string>(); 
dic.Add("a", "A value"); 
dic.Add("b", "B value"); 
dic["a"] = "new A value"; 

あなたがリストを使用順序とインデックスを使用したい場合:もちろん

public class Item 
{ 
    public string Key; 
    public string Value; 
} 

    List<Item> items = new List<Item>(); 

    items.Add(new Item { Key = "a", Value = "A Value" }); 
    items.Add(new Item { Key = "b", Value ="B Value" }); 

    items[1] = new Item { Key = "c", Value = "C value" }; 

をこのケースでは、あなたがその重複したキーを持つことができます重複するキーを避けたい場合は、自分で確認する必要があります。

+0

私のコードのリスト部分にエラーがありました。私はちょうどそれを修正した。それを見てください。 –

+0

問題の代替ソリューション。良い提案 – Everyone

+1

@AmmarSalmanありがとう –

0

辞書の内部での格納方法を指定することはできません。それはハッシュテーブルの下にあり、ハッシュテーブルはハッシュに基づいて動作します。

質問をより明確にすることはできますか?要素の格納先をもっと心配している場合は、配列を使用することができます(キーが心配されていない場合)。

2

明らかに、ディクショナリの仕組みが分かりません。 ディクショナリは、多数のインデックスを持つハッシュ関数に基づいています。キーに基づいて、値は辞書のどこかに配置されます。

例えば、5つの要素の辞書は、このようにすることができ:

[0] - > "エレメント1"

[1] - >

[2] - >

[3] - > "エレメント2" "エレメント5"

[4] - > "要素3"

[5] - > "element4"

これに基づいて、 "最後"要素の前に何かを保存することは意味がありません。 「最後の」要素はありません。この例では、element4より前にはelement5が格納されていますが、これは辞書で使用されるハッシュ関数のためです。辞書を反復処理すると、挿入した順番とは異なる結果になります。

EDIT:私が正しく理解していれば、instance[key]と同時に呼び出すことができるデータ構造が必要であり、同時にリストとして反復することができます。 keyは文字列なので、そのようなデータ構造は存在できません。また、文字列キーから期待通りの順序を作る方法がありません。ハッシュ関数が何であっても動作しません。任意のハッシュテーブル(または辞書)で、(key1/value1)を次に(key2/value2)に追加すると、は、key1とkey2の両方が同じテーブルエントリにハッシュされていない限り、同じ要素の順序を取得します。

要するに、ディクショナリに格納されているアイテムの順序に基づいてアルゴリズムを構築することはできません。順序は、ハッシュ関数とインデックステーブルサイズによって異なります。

関連する問題