你可以在Chapel拉链吗?

时间:2018-03-30 20:36:32

标签: 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循环,但我想知道是否有更简洁的方法。

1 个答案:

答案 0 :(得分:3)

我认为嵌套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);
}

这需要稍多的代码,但是有一个优点,即如果你在代码中多次执行这种全对模式,你可以多次重复使用迭代器。请注意,如果您愿意,迭代器也可以直接生成连接字符串。