2017-08-11 4 views
1

J'ai une table qui contient des ID pour différents produitsTableau de tableaux avec chaque index de tableau est unique

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

Quand je lis registre d'identification de produit, la valeur est l'un des ci-dessus ID uniques (c.-à-0x03) Je suis essayer de lire à quel produit correspond cet identifiant. Pour exapmle comment obtenir Key = 'A' de ID = 0x03?

Répondre

2

Vous devez rechercher la table:

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)) 

Si la table est longue et vous devez le faire très souvent, envisager la construction d'un indice:

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

+1 pour la création d'index. Depuis ma table ne se développera pas très souvent. Je pourrais reconstruire la table comme Keys = IDs et Value = Products. mais cela ne paraîtra pas très logique pour le lecteur à l'avenir. Existe-t-il un moyen de générer une table d'index pendant que je déclare la table Products = {}? Je veux dire si je peux passer l'appel de la fonction à findproduct()? –

+0

@waqas_sha, vous pourriez envelopper le deuxième morceau de code dans une fonction 'MakeIndex'. – lhf