質問

また、辞書のようなもの

Dictionary<Foo,String> fooDict

Iステップを通じて全ての辞書の例

foreach (Foo foo in fooDict.Keys)
    MessageBox.show(fooDict[foo]);

なのにfoosに追加された辞書の最初の項目として追加された最初のfooを返します。

変更するには、どうすればいいでカーディナリティとは、例えば、fooを追加するfoo返却されますか?これは、変更したいその"指数"

役に立ちましたか?

解決

た場合の説明をお読みMSDNます:

"順番で購入された商品を返品されるかは定義されていません。"

できませんgauranteeのため辞書にはないリストまたは配列になります。このように見上げる値のキーワードに、能力に対して繰り返し処理を実行する価値があり利便性のためのない動きによるべきである。

他のヒント

ご興味のあるの OrderedDicationary クラスの取り扱いしております System.Collections.Specialized namespace.

また、コメントの底からMSFTは、この興味深い注意:

このタイプは実際にmisnamed;ではありません'順序付き辞典"など、その"指'辞書で調べました。が、今日はありません相当額一般版をこの型の場合を追加してください、今後こまの名前などのタイプ'IndexedDictionary'.

ていただきたいと思います些細なき出しでこのクラスは、アクOrderedDictionary.

な教育を受け、ドメイン 適切な質問に答えがしていま この辞書順に従って値を、鍵盤を行うために、迅速に鍵を検索するこれらの辞書順にソートキー値によるキーと比較しました。しかし、 オブジェクト 法思ってハッシュコードの比較に異物を検討など必要ありませんの種類の使用のための鍵となります。これだけのようですね。人knowledgey必要事項をご記載くださいます。

なぜに興味を持っていただけたら操作する"インデックス"辞書がその目的はインデックスと任意の種類?

わからない場合は誰にでもこの役に立つのだから当社がコーヒーに飽きたら寿司に。そうで作るというんで捨てると例外がまだの方法からできる試験での作品としてのあなたにとってどんな年でした。そして、同様のもの前にあります。

        public void sortSections()
    {
        //OMG THIS IS UGLY!!!
        KeyValuePair<ListViewItem, TextSection>[] sortable = textSecs.ToArray();
        IOrderedEnumerable<KeyValuePair<ListViewItem, TextSection>> sorted = sortable.OrderBy(kvp => kvp.Value.cardinality);

        foreach (KeyValuePair<ListViewItem, TextSection> kvp in sorted)
        {
            TextSection sec = kvp.Value;
            ListViewItem key = kvp.Key;

            textSecs.Remove(key);
            textSecs.Add(key, sec);
        }
    }

その答えはするべきではないので、以来、そのように、辞書"は、収集のキーと値です。"しないがあるということを意味するもののような順序づけを行います。他のhack感じるかもしれませんが外に定義クラスの場合の責任を負う。

るべき最初の行だければ辞書は本当に求められることやばくのリストを使用してKeyValuePairs.

そのようなこの方法が有効であると思われ:

public class IndexableDictionary<T1, T2> : Dictionary<T1, T2>
{
    private SortedDictionary<int, T1> _sortedKeys;

    public IndexableDictionary()
    {
        _sortedKeys = new SortedDictionary<int, T1>();
    }
    public new void Add(T1 key, T2 value)
    {
        _sortedKeys.Add(_sortedKeys.Count + 1, key);
        base.Add(key, value);
    }

    private IEnumerable<KeyValuePair<T1, T2>> Enumerable()
    {
        foreach (T1 key in _sortedKeys.Values)
        {
            yield return new KeyValuePair<T1, T2>(key, this[key]);
        }
    }

    public new IEnumerator<KeyValuePair<T1, T2>> GetEnumerator()
    {
        return Enumerable().GetEnumerator();
    }

    public KeyValuePair<T1, T2> this[int index]
    {
        get
        {
            return new KeyValuePair<T1, T2> (_sortedKeys[index], base[_sortedKeys[index]]);
        }
        set
        {
            _sortedKeys[index] = value.Key;
            base[value.Key] = value.Value;
        }

    }


}

クライアントコードを見て思ったこと。

    static void Main(string[] args)
    {
        IndexableDictionary<string, string> fooDict = new IndexableDictionary<string, string>();

        fooDict.Add("One", "One");
        fooDict.Add("Two", "Two");
        fooDict.Add("Three", "Three");

        // Print One, Two, Three
        foreach (KeyValuePair<string, string> kvp in fooDict)
            Console.WriteLine(kvp.Value);



        KeyValuePair<string, string> temp = fooDict[1];
        fooDict[1] = fooDict[2];
        fooDict[2] = temp;


        // Print Two, One, Three
        foreach (KeyValuePair<string, string> kvp in fooDict)
            Console.WriteLine(kvp.Value);

        Console.ReadLine();
    }

更新: 何らかの理由でないて、一言述べさせていただき、自分で答えになります。

になっIndexableDictionaryとは異なOrderedDictionaryる

  1. "の要素のOrderedDictionary順に並んでいます" でforeachのような注目の数値指標
  2. で強く型付けされたものあいだにゃ鋳造品のものDictionaryEntry構造体
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top