سؤال

لدي تعبير lambda يحصل على نتائج من القاموس.

var sortedDict = (from entry in dctMetrics 
                  orderby entry.Value descending 
                  select entry);

يسحب التعبير الأزواج التي أحتاجها ، أستطيع أن أراها في وضع تصحيح IDE.

كيف يمكنني تحويل هذا القاموس من نفس النوع مثل المصدر؟ أعلم أن توطيد SortedDict عبارة عن keyvaluepair ، لكنني أواجه مشكلة في فهم بناء جملة طريقة تمديد todictionary تمامًا. لقد حاولت أيضًا Foreach'ing نتيجة VAR لإنشاء قاموس جديد ، ولكن دون جدوى.

هل هناك شيء مثل هذا (الوظيفة الحكيمة):

var results = (from entry in dictionary 
               orderby entry.Value descending 
               select entry);
Dictionary<string,float> newDictionary = results as (Dictionary<string,float>);
هل كانت مفيدة؟

المحلول

يمكنك أن تفعل ذلك مثل هذا:

var newDictionary = results.ToDictionary(r => r.Key, r => r.Value);

اقرأ أنه "لكل زوج في النتائج ، أضف هذا العنصر إلى القاموس الجديد ، حيث سيتم إنتاج المفتاح كمفتاح الزوج ، وسيتم إنتاج القيمة كقيمة للزوج."

أيضًا ، استنادًا إلى رمز نموذجك - يجب أن تضع في اعتبارك أن أ Dictionary<T, U> يتم تنفيذه كجدول التجزئة ، لذلك لن يحافظ على ترتيب العناصر التي وضعتها فيها. النظر في استخدام SortedDictionary أو أ SortedList بدلاً من ذلك إذا كنت بحاجة إلى خريطة مرتبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top