2017-08-11 80 views
1

我有一個包含標識爲不同的產品陣列與每個陣列索引表是唯一

Products = { 
     ['A'] = { 0x01, 0x02, 0x03 }, 
     ['B'] = { 0x11 }, 
     ['C'] = { 0x20, 0x22 } 
} 

當我讀產品ID寄存器中的表,該值高於唯一ID中的一個(即0×03),我試圖閱讀這個ID對應的產品。 exapmle如何從ID = 0x03獲得Key ='A'?

回答

2

你要搜索表:

function findproduct(id) 
     for k,v in pairs(Products) do 
       for _,i in pairs(v) do 
         if i==id then return k end 
       end 
     end 
end 
print(findproduct(0x03)) 

如果表是漫長的,你需要做這個,很多時候,考慮建立一個索引:

Index = {} 
for k,v in pairs(Products) do 
     for _,i in pairs(v) do 
       Index[i]=k 
     end  
end  
print(Index[0x03]) 
+0

+1創建索引。由於我的表不會經常展開。我可以重建表格,如Keys = ID和Value = Products。但是這對未來的讀者來說看起來不太合邏輯。有沒有辦法在聲明Products = {}表時創建索引表?我的意思是如果我可以跳過函數調用findproduct()? –

+0

@waqas_sha,你可以將第二段代碼包裝到一個函數'MakeIndex'中。 – lhf