You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chapel中如何简洁实现两个字符串域的所有配对组合?

更简洁的Chapel字符串域笛卡尔积实现方法

嘿,刚好Chapel对这种笛卡尔积场景有非常简洁的语法支持,完全不用写嵌套循环!

直接用域迭代器推导式就能一行生成你要的crossDomain:

var crossDomain = domain(string)( (d + "-" + s) for d in dd, s in sd );

原理说明

这个写法里:

  • (d + "-" + s) for d in dd, s in sd 是Chapel的迭代器语法,会自动遍历dd和sd的所有元素配对,把每对拼接成"X-Y"格式的字符串;
  • 把这个迭代器直接传给domain(string),就能一次性创建包含所有拼接结果的字符串域,省去了手动初始化域再逐个添加元素的步骤。

对比原来的嵌套循环写法

原来的实现大概是这样:

var crossDomain: domain(string);
for d in dd {
  for s in sd {
    crossDomain += d + "-" + s;
  }
}

新写法不仅代码量减少了一大半,而且Chapel编译器能对这种推导式结构做针对性优化,运行效率也不会打折扣。

另外你也可以先创建元组类型的笛卡尔积域,再转换为字符串域,这个思路也可行,但上面的写法是最直接的:

// 先得到(string, string)类型的笛卡尔积域
var tupleCrossDomain = dd * sd;
// 再转换为字符串域
var crossDomain = domain(string)( t[0] + "-" + t[1] for t in tupleCrossDomain );

内容的提问来源于stack exchange,提问作者Brian Dolan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:18:57