2017-10-06 67 views
2

在Python中,如果我有一個列表,我可以找到索引。這使我可以在添加內容時保持運行ID。如何在Chapel中查找類似字典的數據進行雙向查找?

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

所以給一個蔬菜(或塊莖),我可以找到它的ID。給定一個ID,我可以找到一個蔬菜(或塊莖)匹配。

對於未知數量的對象並且能夠從名稱或ID中引用,Chapel中的等效模式是什麼?

+0

如果'東西'很大,你應該使用字典來做反向映射。 – kindall

回答

2

您可以使用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提到一本字典可能是更好的選擇。在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); 

如果索引不在密集範圍內,兩個關聯數組會更好。