C# LINQ نتيجة مساعدة toDictionary
-
21-09-2019 - |
سؤال
لدي تعبير 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
بدلاً من ذلك إذا كنت بحاجة إلى خريطة مرتبة.