如何在 Chapel 中表示集合或字典?
How to represent a Set or Dictionary in Chapel?
在 Python 中,使用
可以轻松创建一组唯一的、无序的对象
>>> s = set()
>>> s.add("table")
>>> s.add("chair")
>>> s.add("emu")
>>> s
set(['emu', 'table', 'chair'])
我知道 Chapel 有域,但是将它们用作集合合适吗?有什么陷阱吗?字典呢?
并非所有 Chapel 域都是集合,但 'associative domains' 可以用作集合:
var s : domain(string);
s.add("table");
s.add("chair");
s.add("emu");
writeln(s); // {chair, table, emu}
var t = {"table", "chair", "emu"}; // associative domain literal
与 python 集一样,关联域支持成员检查和并集、差集、交集运算(以及其他)。 See the online docs for more information. 默认情况下,关联域可以安全地并行使用。
Chapel 的 'associative arrays' 类似于 python 词典。 Chapel 数组是从索引到元素的映射,因此我们可以创建具有关联域的关联数组:
var inds = {1, 2, 3, 7, 42};
var map : [inds] string;
map[3] = "foo";
map[42] = "bar";
inds.add(100); // add new index and element
assert(map[100] == "");
map[100] = "baz";
var lit = ["bob" => 1, "alice" => 2]; // assoc. array literal
在 Python 中,使用
可以轻松创建一组唯一的、无序的对象>>> s = set()
>>> s.add("table")
>>> s.add("chair")
>>> s.add("emu")
>>> s
set(['emu', 'table', 'chair'])
我知道 Chapel 有域,但是将它们用作集合合适吗?有什么陷阱吗?字典呢?
并非所有 Chapel 域都是集合,但 'associative domains' 可以用作集合:
var s : domain(string);
s.add("table");
s.add("chair");
s.add("emu");
writeln(s); // {chair, table, emu}
var t = {"table", "chair", "emu"}; // associative domain literal
与 python 集一样,关联域支持成员检查和并集、差集、交集运算(以及其他)。 See the online docs for more information. 默认情况下,关联域可以安全地并行使用。
Chapel 的 'associative arrays' 类似于 python 词典。 Chapel 数组是从索引到元素的映射,因此我们可以创建具有关联域的关联数组:
var inds = {1, 2, 3, 7, 42};
var map : [inds] string;
map[3] = "foo";
map[42] = "bar";
inds.add(100); // add new index and element
assert(map[100] == "");
map[100] = "baz";
var lit = ["bob" => 1, "alice" => 2]; // assoc. array literal