D:地图和每个地图有什么区别?

Sul*_*man 4 iteration d

std.algorithm有两个迭代函数mapeach.我无法理解有什么区别?

lod*_*odo 6

each执行一个急切的评估,同时map执行一个懒惰的评估.这意味着在您应用时each,会立即map计算每个元素,而仅在您访问它们时计算其结果.

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


Ada*_*ppe 6

map不是迭代,它是一个转换函数.(事实上​​,将地图应用于范围根本不会迭代它;"懒惰地进行评估"在其文档中意味着您仍然负责自己迭代结果.)

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只是返回更改),您将在一系列转换结束时执行此操作.map是一个中间工具.


w0r*_*0rp 5

map获取范围并将函数应用于范围中的每个元素,并返回包含结果的范围.该范围是懒惰评估的,因此您不会计算任何值,除非您对该范围执行其他操作,例如应用foreach它.

each热切地将函数应用于范围中的每个元素.所以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;
Run Code Online (Sandbox Code Playgroud)