D:map和each有什么区别?

D: What difference between map and each?

std.algorithm有两个迭代函数mapeach。我不明白有什么区别?

each 执行急切求值,而 map 执行惰性求值。 这意味着当您应用 each 时,会立即计算每个元素,而 map 仅在您访问它们时才计算其结果。

这也意味着each不适合无限流

map 不是用于迭代,它是一个转换函数。 (实际上,将 map 应用于范围根本不会对其进行迭代;"evaluation is done lazily" 在其文档中意味着您仍然有责任自行迭代结果。)

eachmap 的变体,它会自动执行迭代,同时在此过程中进行转换。它也适用于 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;