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

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

根据 iterable 计算键和值创建 Map 实例。

对于 iterable 的每个元素,通过将 iterable 的元素分别应用于 key 和 value,计算键/值对。

相当于映射字面量

<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}

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

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

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

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

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

实现

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