在 Python 中,如果我有一个列表,我可以找到索引。这允许我在添加内容时继续运行 ID。
> things = []
> things.append("spinach")
> things.append("carrots")
> things.index("carrots")
1
所以给一个蔬菜(或块茎)我可以找到它的 ID。给定一个 ID,我可以找到一种蔬菜(或块茎)来匹配。
对于未知数量的对象并且能够从名称或 ID 中引用,Chapel 中的等效模式是什么?
您可以使用push_back
和find
与一维矩形阵列:
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 提到字典可能是更好的选择。在 Chapel 中,这意味着一个关联域/数组:
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);
如果索引不在密集范围内,两个关联数组会更好。