Map<K, V>.fromIterable 构造函数

Map<K, V>.fromIterable(
  1. Iterable iterable,
  2. {K key(
    1. dynamic element
    )?,
  3. V value(
    1. dynamic element
    )?}
)

创建一个 Map 实例,其中的键和值从 iterable 计算得出。

iterable 的每个元素,通过分别对 iterable 中的元素应用 keyvalue 来计算键值对。

等同于映射字面量

<K, V>{for (var v in iterable) key(v): value(v)}

字面量通常更可取,因为它允许更精确的类型。

以下示例从一个整数字符串的列表创建一个新的映射。映射的键是列表值转换为字符串,映射的值是列表值的平方

final numbers = <int>[1, 2, 3];
final map = Map<String, int>.fromIterable(numbers,
    key: (item) => item.toString(),
    value: (item) => item * item);
print(map); // {1: 1, 2: 4, 3: 9}

如果没有为 keyvalue 指定值,则默认为恒等函数。在这种情况下,iterable 元素必须是指定映射键或值的类型的可赋值类型。

在以下示例中,映射的键和对应的值是列表值直接

final numbers = <int>[1, 2, 3];
final map = Map.fromIterable(numbers);
print(map); // {1: 1, 2: 2, 3: 3}

由源 iterable 计算出的键不需要是唯一的。最后一个键的出现将覆盖前面出现的任何键的值。

创建的映射是一个 LinkedHashMapLinkedHashMap 要求键实现兼容的 operator==hashCode。它按照键插入顺序迭代。

实现

factory Map.fromIterable(Iterable iterable,
    {K key(dynamic element)?,
    V value(dynamic element)?}) = LinkedHashMap<K, V>.fromIterable;