Сортировка по гибкому словарю
-
13-09-2019 - |
Вопрос
У меня есть следующий гибкий словарь, и я хотел бы отсортировать его по значению.Не удалось найти ни одного ресурса.
'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;
}