首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chapel有动态数据结构吗?

Chapel有动态数据结构吗?
EN

Stack Overflow用户
提问于 2016-09-07 18:48:25
回答 1查看 214关注 0票数 3

Chapel似乎专注于固定大小的n维数组和元组。乍一看,似乎没有动态数据结构。

一个特别的问题是,您似乎必须预先声明关联数组的大小。其他语言的地图和词典不受此限制。

Chapel有没有一个更动态的地图/字典类型,我刚刚错过了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 21:48:38

首先,你的问题的答案是肯定的。映射/字典的内置等价物是Chapel中的关联数组。参见associative arrays primer

例如,让我们声明一个字典,从名人的名字到他们的出生年份。

首先,创建一个包含以下名称的域(即索引集):

代码语言:javascript
复制
var setOfNames : domain(string); // a domain (set) whose indices are strings

domain(t)的类型声明,其中t是某种类型,创建了一个关联域。

然后,在该域上创建一个存储整数年龄的数组。这实际上是从string -> int创建了一个映射。

代码语言:javascript
复制
var nameToBirthYear : [setOfNames] int;

要将某人添加到集合中,我们需要首先将他们添加到域中,然后在数组中设置他们的出生年份。

代码语言:javascript
复制
setOfNames.add("Thomas Jefferson");
nameToBirthYear["Thomas Jefferson"] = 1743;

setOfNames.add("Alan Turing");
nameToBirthYear["Alan Turing"] = 1912;

Chapel被设计为支持同一域上的多个数组。因此,如果我们想单独知道出生地,我们可以创建一个单独的数组来跟踪它。

代码语言:javascript
复制
var nameToBirthPlace : [setOfNames] string;

nameToBirthPlace["Thomas Jefferson"] = "the Colony of Virginia";
nameToBirthPlace["Alan Turing"] = "London, England";

现在,如果我们想要添加一个新的名人怎么办?

代码语言:javascript
复制
setOfNames.add("Ada Lovelace");
// note now that both nameToBirthYear and nameToBirthPlace now have
// a value for the key "Ada Lovelace". That new element starts out with
// the default value - so it's 0 and the empty string in this case.
nameToBirthYear["Ada Lovelace"] = 1815;
nameToBirthPlace["Ada Lovelace"] = "London, England";

作为演示,我们将遍历索引集并打印出相关的数组元素。(请注意,此循环使用拉链迭代会更有意义,但我尽量将此示例集中在关联数组和域上)。

代码语言:javascript
复制
for name in setOfNames {
  var birthYear = nameToBirthYear[name];
  var birthPlace = nameToBirthPlace[name];
  writeln(name, " started out in ", birthPlace, " in the year ", birthYear);
}

请注意,这些关联数组和域目前是使用哈希表实现的。可以创建自定义关联数组实现,也可以为红黑树或任何需要的东西创建自定义(非数组)数据结构。

将来,可能有一天可以将键、值对直接添加到关联数组中(而无需显式提及数组的域)。当域未被其他阵列共享时,一维阵列支持此类功能(请参阅array vector operations primer )。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39367846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档