Dlang:foreach 循环或 "each" 模板
Dlang: foreach loop or "each" template
假设我有一个可迭代的对象数组,我想遍历每个对象并执行一些任务。我看到了两种执行此操作的方法,如下所列。我已经使用 MonoTime 对两者进行了计时,就执行时间而言,它们似乎具有可比性。
建议在 D 中使用以下哪个选项?在什么情况下推荐的选项可能没有用?
int[] animals = [animal1, animal2, animal3];
// OPTION 1
foreach(Animal a; animals) {
a.feed();
a.giveWater();
}
// OPTION 2
animals.each!( (a) {a.feed();
a.giveWater();
});
foreach
是默认值。
我使用 each
的一件事是对集合应用大量转换(使用 std.algorithm),然后迭代结果。这仅是为了可读性。考虑是否要迭代以下内容:
students
.filter!(s => s.year == 1)
.map!(s => s.major)
.filter!(m => m !is null)
.map!(x => faculty.byProgram(x))
.joiner
.array
.sort
.uniq
将它放在 foreach 中会很尴尬。添加 .each!(x => writeln(x.name))
.
是很自然的
我正在使用 each
直接调用函数。
例如:
[1, 2, 3].each!writeln();
假设我有一个可迭代的对象数组,我想遍历每个对象并执行一些任务。我看到了两种执行此操作的方法,如下所列。我已经使用 MonoTime 对两者进行了计时,就执行时间而言,它们似乎具有可比性。
建议在 D 中使用以下哪个选项?在什么情况下推荐的选项可能没有用?
int[] animals = [animal1, animal2, animal3];
// OPTION 1
foreach(Animal a; animals) {
a.feed();
a.giveWater();
}
// OPTION 2
animals.each!( (a) {a.feed();
a.giveWater();
});
foreach
是默认值。
我使用 each
的一件事是对集合应用大量转换(使用 std.algorithm),然后迭代结果。这仅是为了可读性。考虑是否要迭代以下内容:
students
.filter!(s => s.year == 1)
.map!(s => s.major)
.filter!(m => m !is null)
.map!(x => faculty.byProgram(x))
.joiner
.array
.sort
.uniq
将它放在 foreach 中会很尴尬。添加 .each!(x => writeln(x.name))
.
我正在使用 each
直接调用函数。
例如:
[1, 2, 3].each!writeln();