Какие есть способы создания из List экземпляра Map без использования коллбэк-функций (fromIterable)?
Столкнувшись с задачкой преобразовать список объектов в Map, решил ее следующим образом:
class OrganizationFields {
late Map<String, OrgField> items = <String, OrgField>{};
OrganizationFields({ List<OrgField>? fields })
: this.items = Map.fromIterable([...?fields], key: (itm) => itm.name, value: (itm) => itm);
}
Но не нравится то, что тут на каждой внутренней итерации fromIterable будет выполняться по два вызова. Это выглядит не очень "красиво", и предполагаю что в Dart возможны более скоростные решения. Тем более что в другом месте проекта предполагается очень частое пересоздание практически аналогичных Map другой сущности, и хотелось бы научиться это оптимизировать. Входные данные всегда списками, и это нельзя изменить, к сожалению.
Поэтому, вопрос: есть ли способы сделать то же самое (так же создать Map из List'а объектов с использованием свойства в качестве ключа) более шустрым кодом без использования множества вызовов?
Тот же код в песочнице (с рандомными элементами).
p.s.:
В проекте использую Flutter+GetX, если вдруг это имеет значение.
Это мой самый первый опыт с дартом (в основном на JS пишу), и если делаю что-то неправильно - буду признателен за критику в комментах.
Ответы (1 шт):
Есть альтернатива Map.fromIterable без callback, это for/for-in:
items = { for (int i = 0; i < fields.length; i++) fields[i].name: fields[i] };
// или
items = { for (var itm in fields) v.name: itm };