D:map和each有什么区别?
D: What difference between map and each?
std.algorithm有两个迭代函数map
和each
。我不明白有什么区别?
each
执行急切求值,而 map
执行惰性求值。
这意味着当您应用 each
时,会立即计算每个元素,而 map
仅在您访问它们时才计算其结果。
这也意味着each
不适合无限流
map
不是用于迭代,它是一个转换函数。 (实际上,将 map 应用于范围根本不会对其进行迭代;"evaluation is done lazily" 在其文档中意味着您仍然有责任自行迭代结果。)
each
是 map
的变体,它会自动执行迭代,同时在此过程中进行转换。它也适用于 opApply
迭代样式,而 map
不适用。
http://dlang.org/phobos/std_algorithm_iteration.html#.each
http://dlang.org/phobos/std_algorithm_iteration.html#.map
each
是您在一系列转换结束时要做的事情,当您准备好处理结果并可能将更改保存回原始范围时(each
可以就地保存更改,而 map
只是 returns 更改)。 map
是中级工具。
map
接受一个范围并将一个函数应用于该范围内的每个元素,returns 一个包含结果的范围。该范围是 延迟计算的 ,因此您不会计算任何值,除非您对该范围执行其他操作,例如对其应用 foreach
。
each
将函数应用到范围 eagerly 中的每个元素。所以 each
就像一行 foreach
.
// Do some pointless application of map.
// The map won't be run here.
auto range = iota(0, 10).map!(x => cast(float) x);
// Now write all of them to stdout.
// This will be evaluated.
range.each!writeln;
std.algorithm有两个迭代函数map
和each
。我不明白有什么区别?
each
执行急切求值,而 map
执行惰性求值。
这意味着当您应用 each
时,会立即计算每个元素,而 map
仅在您访问它们时才计算其结果。
这也意味着each
不适合无限流
map
不是用于迭代,它是一个转换函数。 (实际上,将 map 应用于范围根本不会对其进行迭代;"evaluation is done lazily" 在其文档中意味着您仍然有责任自行迭代结果。)
each
是 map
的变体,它会自动执行迭代,同时在此过程中进行转换。它也适用于 opApply
迭代样式,而 map
不适用。
http://dlang.org/phobos/std_algorithm_iteration.html#.each
http://dlang.org/phobos/std_algorithm_iteration.html#.map
each
是您在一系列转换结束时要做的事情,当您准备好处理结果并可能将更改保存回原始范围时(each
可以就地保存更改,而 map
只是 returns 更改)。 map
是中级工具。
map
接受一个范围并将一个函数应用于该范围内的每个元素,returns 一个包含结果的范围。该范围是 延迟计算的 ,因此您不会计算任何值,除非您对该范围执行其他操作,例如对其应用 foreach
。
each
将函数应用到范围 eagerly 中的每个元素。所以 each
就像一行 foreach
.
// Do some pointless application of map.
// The map won't be run here.
auto range = iota(0, 10).map!(x => cast(float) x);
// Now write all of them to stdout.
// This will be evaluated.
range.each!writeln;