【问题标题】:Check 2d array for same values检查二维数组是否有相同的值
【发布时间】:2014-05-15 10:09:31
【问题描述】:

我正在尝试制作一个游戏并且我有一个二维数组

所以它是这样的:

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

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

如果我“删除”匹配的索引,我的计划是将其上方或下方的索引行移动到 4 个索引行中......但首先要做的是

【问题讨论】:

  • 您的意思是要删除至少有两个相同值字段的行吗?此外,您应该尝试 something 并发布您尝试过的内容,否则您可能会遇到关闭此问题的风险。
  • @Schollii 我不好意思把我的解决方案贴在这里。我尝试了分配 if else 语句。
  • 您只对上/下和左/右匹配感兴趣吗?还是对角线匹配?
  • @Mike Corcoran 我只想检查 4 的索引是否匹配..
  • @MichaelAngelo 找到相同并删除它们是非常不同的操作;如果您删除条目,您的表格将不再是网格。请澄清,也许显示删除后网格应该是什么样子。说真的,你应该把尴尬放在一边,这是一个学习的论坛,适合所有经验水平的人。唯一的尴尬是表现出任何努力自己解决它;)

标签: arrays lua matching lua-table


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2021-12-29
    • 2012-05-20
    • 2019-07-04
    相关资源
    最近更新 更多