1

私は辞書を使って情報を収集しています。詳細を収集したら、var 変数を使用してキーに基づいて辞書の値を並べ替える必要があります。その後、ソートされた var 変数を新しい辞書に挿入する必要があります。ここで、ソートされたデータをディクショナリに挿入するのに問題があります。

ここにコードを投稿しています:

var  orderDic = from dic in dictionaryColl
                orderby dic.Key  ascending
                select dic;             
Dictionary<int, string> newDic = new Dictionary<int, string>();
newDic =(Dictionary<int,string>)orderDic;  // Here i'm not able to assign data to dictionary

前もって感謝します..

4

5 に答える 5

4

次のように辞書に直接変換できます。

Dictionary<int, string> newDic  = (from dic in dictionaryColl
                                  orderby dic.Key ascending
                                  select dic)
                                 .ToDictionary(r => r.Key, r => r.Value);

またはメソッド構文で:

Dictionary<int, string> newDic = dictionaryColl
                                .OrderBy(r => r.Key)
                                .ToDictionary(r => r.Key, r => r.Value);

編集: OrderByDictionary 項目の順番での取得には影響しません。

見る:Dictionary<TKey, TValue> Class

列挙のために、ディクショナリ内の各項目は、値とそのキーを表す KeyValuePair 構造体として扱われます。アイテムが返される順序は定義されていません

必要なのは、次のようなSortedDictionaryです。

SortedDictionary<int, string> sortedNewDic = 
           new SortedDictionary<int, string>(dictionaryColl);
于 2013-05-20T12:10:10.290 に答える
0

最初に SortedDictionary を使用しないのはなぜですか ( http://msdn.microsoft.com/en-us/library/f7fta44c.aspx ) ?

于 2013-05-20T12:15:47.767 に答える
0
newDic =(Dictionary<int,string>).OrderBy(l => l.ColName).ToList();

ソートまたは順序付けを適用する列の名前はどこColNameにありますか。

于 2013-05-20T12:21:47.930 に答える
-2

使用できます

var _ordered = _dic.OrderBy(d => d.key).ToDictionary(d => d.Key, d => d.Value); 

辞書を昇順に並べ替えるメソッド。

また

あなたが使用することができます

var _ordered = _dic.OrderByDescending(d => d.key).ToDictionary(d => d.Key, d => d.Value); 

辞書を降順に並べ替えるメソッド。

または、同じ辞書を置き換えたい場合は、

var _ordered = _dic.OrderByDescending(d => d.key).ToDictionary(d => d.Key, d => d.Value); 

元の辞書が _dic の場合

_dic=new Dictionary<int, string>(_ordered);

次のコードを実行してください。

class Program
{
    static void Main(string[] args)
    {
        Dictionary<int,string> _dic=new Dictionary<int,string>();
        _dic.Add(5,"xyz");
        _dic.Add(2,"abc");
        _dic.Add(1,"pqr");
        _dic.Add(4,"test");
        _dic.Add(3,"pvf");

        var _ordered=_dic.OrderBy(d => d.Key).ToDictionary(d=> d.Key,d=>d.Value);
        _dic=new Dictionary<int,string>(_ordered);
    }
}

上記のアプリケーションをデバッグして、_dic がキーに基づいてソートされた辞書を持っていることを確認できます。

于 2013-05-20T12:15:19.033 に答える