Search code examples
indexingluacompare

compare values in an table in lua


I need help. I am having an table like this:

local dict = {}

dict[1] = {achan = '7f', aseq='02'} --ACK
dict[2] = {dchan = '7f', dseq='03'} --DATA
dict[3] = {achan = '7f', aseq='03'} --ACK
dict[4] = {dchan = '7f', dseq='04'} --DATA
dict[5] = {achan = '7f', aseq='04'} --ACK
dict[6] = {dchan = '7f', dseq='02'} --DATA

Basically I am using this in an Dissector so I don't know the Index except the one I am actually "standing" at the moment.

So what I want to have is:

if the "achan" and the "dchan" is the same and the "aseq" i am standing at the moment is the same as an "dseq" value on positions from the past which are already saved into the table then it should give me back the index from the same "dseq" value from the past.

if (dict[position at the moment].achan == dict[?].dchan) and (dict[position at the moment].aseq == dict[?].dseq) then 
 return index
end 

for example: dchan from position 6 is the same es achan from position 1 and dseq from position 6 is the same as aseq from position 1. So I want to get the position 1 back


Solution

  • You can use a numeric for loop with a negative step size to go back in your table, starting from the previous element. Check wether the achan and aseq fields exist, then compare them vs the dchan and dseq fields of your current entry.

    function getPreviousIndex(dict, currentIndex)
      for i = currentIndex - 1, 1, -1 do
        if dict[i].achan and dict[currentIndex].dchan
           and dict[i].achan == dict[currentIndex].dchan
           and dict[i].aseq and dict[currentIndex].dseq
           and dict[i].aseq == dict[currentIndex].dseq then
           return i
        end
      end
    end
    

    This code assumes you have no gaps in your table. You should also add some error handling that makes sure you actually are at a dchan entry and that your index is in range and so on...