你能拉上 Chapel 里的所有双鞋吗?
Can you zip all pairs in Chapel?
假设,稍等片刻,然后回到你的一天,我在 Chapel 中有两个字符串域,我想获得所有对的字符串域。
var dd: domain(string), sd: domain(string);
dd += "Monday"; dd+="Tuesday"; dd+="Wednesday";
sd += "Rainy"; sd+= "Sunny";
var crossDomain = // 6 strings like "Monday-Rainy", "Monday-Sunny"
我可以嵌套 for
循环,但我想知道是否有更简洁的方法。
我认为嵌套的 for 或 for 循环是一个不错的选择:
for day in dd do
for cond in sd do
crossDomain += (day + "-" + cond);
另一种方法是编写一个迭代器以将循环从代码中分离出来:
for (day,cond) in allpairs(dd, sd) do
crossDomain += (day + "-" + cond);
iter allpairs(d1, d2) {
for i in d1 do
for j in d2 do
yield (i,j);
}
这需要的代码稍微多一些,但优点是如果您要在代码中多次执行此 all-pairs 模式,则可以多次 re-use 迭代器。请注意,如果您愿意,迭代器也可以直接生成连接的字符串。
假设,稍等片刻,然后回到你的一天,我在 Chapel 中有两个字符串域,我想获得所有对的字符串域。
var dd: domain(string), sd: domain(string);
dd += "Monday"; dd+="Tuesday"; dd+="Wednesday";
sd += "Rainy"; sd+= "Sunny";
var crossDomain = // 6 strings like "Monday-Rainy", "Monday-Sunny"
我可以嵌套 for
循环,但我想知道是否有更简洁的方法。
我认为嵌套的 for 或 for 循环是一个不错的选择:
for day in dd do
for cond in sd do
crossDomain += (day + "-" + cond);
另一种方法是编写一个迭代器以将循环从代码中分离出来:
for (day,cond) in allpairs(dd, sd) do
crossDomain += (day + "-" + cond);
iter allpairs(d1, d2) {
for i in d1 do
for j in d2 do
yield (i,j);
}
这需要的代码稍微多一些,但优点是如果您要在代码中多次执行此 all-pairs 模式,则可以多次 re-use 迭代器。请注意,如果您愿意,迭代器也可以直接生成连接的字符串。