Переупорядочить карту на основе заказа списка - PullRequest
0 голосов
/ 25 октября 2018

Допустим, у меня есть две структуры данных, упорядоченный список строк и HashMap.Список выглядит следующим образом:

types = ["string", "integer", "boolean", "integer"];

И HashMap с ключом объекта и значением String выглядит следующим образом:

map = {2=integer, true=boolean, 7=integer, "dog"=string};

Какой самый простой / эффективный способ реорганизации«порядок» карты, чтобы значения карты совпадали с порядком списка, т. е. карта теперь будет выглядеть следующим образом при печати:

map = {"dog"=string, 2=integer, true=boolean, 7=integer};

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Создайте обратную хэш-карту следующим образом:

types = ["string", "integer", "boolean", "integer"];

map = {2=integer, true=boolean, 7=integer, "dog"=string};

reversedmap = {integer=[2,7], boolean=true, string=dog};

, затем выполните итерацию по списку и получите соответствующие ключи из обратной карты. Например,

, сначала вы получаете "строку" изТипы -> так что вы знаете, соответствующий ключ должен быть «собака».Вставьте эту пару ключ-значение в другую карту (типа LinkedHashMap).Продолжайте делать это, пока не дойдете до конца списка типов.

РЕДАКТИРОВАТЬ: Спасибо @FedericoPeraltaSchaffner за указание на это.

Если вы получаете два значения из обратной карты (например, в случае, если«целочисленного» элемента), вы можете выбрать один из них (неважно, какой) для вставки в LinkedHashMap, а также затем удалить его из обратной карты.И тогда вы переходите к следующему элементу в списке типов

0 голосов
/ 25 октября 2018

HashMap не дает гарантии заказа.Из документации :

Этот класс не дает никаких гарантий относительно порядка карты;в частности, это не гарантирует, что порядок останется постоянным во времени.

Так что, если вы хотели заказать Map, вы обычно хотели бы начать с реализации SortedMap ( документация ).

К сожалению, SortedMap сортирует по ключу, и вы хотите отсортировать по значению, поэтому вам придется либо посмотреть на сторонние библиотеки коллекций, либо рассмотреть что-то другое.как LinkedHashMap ( документация ), который имеет предсказуемый порядок итераций, даже если он не поддерживает сортировку.

Какую стратегию вы бы использовали, чтобы решить, какое целое число использовать, когдаесть два, как показывает ваш пример?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...