Map<K, V>.fromIterable 构造函数
- Iterable iterable,
- {K key(
- dynamic element
- V value(
- dynamic element
创建一个 Map 实例,其中的键和值从 iterable
计算得出。
对 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;