检查2d数组是否有相同的值

时间:2014-04-03 13:59:00

标签: arrays lua matching lua-table

我正在尝试制作游戏而且我有一个二维阵列

所以它是这样的:

Grid[x][y]

让我们假装这些值在其中:

Column 1 Column 2 Column 3 Column 4 Column 5
1        2        5        2        5 
2        2        3        1        1 
1        4        3        4        5 
1        3        3        3        5  <-- match this row
3        5        3        4        5 
2        4        3        4        5
2        4        4        4        5 

在中间(索引4)我想检查是否至少有3倍相同的数字,如果有4次相同甚至5,那该怎么办。

你怎么检查这个?什么是找到相同的好方法并删除那些相同的...我很难找出制作这样的东西的逻辑

这是我试过的:

grid = {}
for x = 1, 5 do
  grid[x] = {finish = false} 
  for y = 1, 7 do 
    grid[x][y] = {key= math.random(1,4)}
  end 
end

function check(t)
  local tmpArray = {}
  local object
  for i = 1,5 do
    object = t[i][1].key
    if object == t[i+1][1].key then
      table.insert( tmpArray, object )
    else 
      break
    end
  end
end

print_r(grid)
check(grid) 
print_r(grid)

其中print_r打印网格:

function print_r ( t ) 
    local print_r_cache={}
    local function sub_print_r(t,indent)
        if (print_r_cache[tostring(t)]) then
            print(indent.."*"..tostring(t))
        else
            print_r_cache[tostring(t)]=true
            if (type(t)=="table") then
                for pos,val in pairs(t) do
                    if (type(val)=="table") then
                        print(indent.."["..pos.."] => "..tostring(t).." {")
                        sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
                        print(indent..string.rep(" ",string.len(pos)+6).."}")
                    else
                        print(indent.."["..pos.."] => "..tostring(val))
                    end
                end
            else
                print(indent..tostring(t))
            end
        end
    end
    sub_print_r(t,"  ")
end

它不起作用那么好,因为我检查了那个之后的索引,如果它不同,它不会添加最后一个.. 我不知道这是不是最好的方式...

如果我&#34;删除&#34;匹配的索引我的计划是将索引行上方或下方移动到4索引行......但首先是

1 个答案:

答案 0 :(得分:1)

您应该比较表中的第二个索引而不是第一个索引:

g = {{1,2,3}, {4,5,6}}

g[1]是第一行,即{1,2,3},而不是{1,4}第一列(第一行和第二行的第一个元素)。您在之前的帖子中做了同样的事情,您应该重读有关表格的Lua文档。你应该做点什么

for i = 1,#t do
     object = t[i][1].key
     if object == t[i][2].key then

这只会比较行中的前两项。如果要检查行是否具有任何相同的连续项,则必须将第二个索引从1循环到#t[i]-1

您可能会发现以下打印功能更有用,因为它将表打印为网格,在之前/之后更容易看到:

function printGrid(g)
    for i, t in ipairs(g) do 
        print('{' .. table.concat(t, ',') .. '}')
    end
end