سؤال

لدي القاموس التالي في Flex، ومعرف ترغب في فرزه حسب القيمة. لا يمكن العثور على أي مورد.

'1'=>2, '0' =>1, '3'=>4 ..

أيه أفكار ؟ كيف يمكنني فرز هذا حسب القيمة؟

هل كانت مفيدة؟

المحلول

ربما لا تكون أفضل طريقة للقيام بذلك ولكنها تعمل:

var a:Array = new Array();
for each (var v:Number in dict)
{
  a.push(v);
}

a.sort();

نصائح أخرى

لقد تفتيشت حول حل مماثل، إلا أنني بحاجة إلى فرز خريطة القاموس وإرجاع مجموعة مرتبة المتعلقة بأزواج القيمة الرئيسية. بعد الفشل في العثور على حل منشور أضع النهج أدناه. تأخذ هذه الطريقة في القاموس كإدخال، وإنشاء صفيف يحافظ على الارتباط، ثم يقوم بفرز الصفيف الناتج باستخدام Array.Sorton () وإرجاع النتائج المرتبطة مرة أخرى كصفيف. يتم استخدام حقول "المفتاح" و "القيمة" في الصفيف في المثال أدناه في الوضوح، ولكن يمكن استخدام أي اسم حقل.

يفترض هذا المثال كائن سلسلة كمفتاح وكائن رقمي كقيمة، على الرغم من أن أي نوع كائن يمكن استخدامه، ومعلمات الحقل المعدلة.

يمكن أيضا استخدام النهج أدناه للفرز حسب المفتاح بدلا من القيمة باستخدام "المفتاح" كحقل "فرز" لطريقة Sorton، ويمكنك استخدام خيارات فرز مختلفة من الترتيب الرقمي التنازلي الذي استخدمته هنا ( AS3 Sorton () وثائق) الرمز أدناه غير عام عمدا لتبسيطها على سبيل المثال أغراض.

      public static function sortDictionaryByValue(d:Dictionary):Array
        {
          var a:Array = new Array();
          for (var dictionaryKey:Object in d)
          {
            a.push({key:dictionaryKey,value:d[dictionaryKey]});
          }
          a.sortOn("value",[Array.NUMERIC|Array.DESCENDING]);
          return a;
        }   
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top