在Python中,如果有列表,我可以找到索引。这使我可以在添加东西时保持运行ID。

> things = []
> things.append("spinach")
> things.append("carrots")
> things.index("carrots")
1


所以给一个蔬菜(或块茎)我可以找到它的ID。给定一个ID,我可以找到一种匹配的蔬菜(或块茎)。

对于未知数量的对象并且能够从名称或ID引用的教堂中,等效的模式是什么?

最佳答案

可以将push_backfind与一维矩形数组一起使用:

var A : [1..0] string;
A.push_back("spinach");
A.push_back("carrots");
const (found, idx) = A.find("carrots");
if found then writeln("Found at: ", idx);
// Found at: 2


请注意,find进行线性搜索,因此@kindall提到字典可能是更好的选择。在教堂里,这意味着一个关联的域/数组:

var thingsDom : domain(string);
var things : [thingsDom] int;
var idxToThing : [1..0] string;
// ...
// add a thing
idxToThing.push_back(something);
const newIdx = idxToThing.domain.last;
thingsDom.add(something);
things[something] = newIdx;

assert(idxToThing[things[something]] == something);


如果索引不在密集范围内,则两个关联数组会更好。

关于python - 如何在Chapel中双向查找类似字典的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46614934/

10-12 21:34