【问题标题】:Return index of an array of tables返回表数组的索引
【发布时间】:2018-09-13 16:28:36
【问题描述】:

我有数组:

racers = {}
racers[6] = {plCP = 4, plID= 21}

如果我的值 plID=21,有没有办法返回赛车手的索引? (在这种情况下,我想返回 6。)

我尝试构建反向索引,但我只能在表中获取索引。这是我现在正在尝试的:

local index={}
for i = 1,5 do
    for k,v in pairs(racers[i]) do
       index[v]=k
    end
end

当我传递值 21 时返回“plID”,但我希望它返回 6。

【问题讨论】:

    标签: arrays indexing lua


    【解决方案1】:

    对于您列表中的每个赛车手,检查 plID 是否等于您正在寻找的 id。

    local racers = {}
    racers[1] = {plCP = 4, plID= 21}
    racers[2] = {plCP = 2, plID= 4}
    racers[3] = {plCP = 6, plID= 5}
    racers[4] = {plCP = 222, plID= 7}
    racers[5] = {plCP = 6, plID= 12}
    
    function getRacerIndexById(racerList, id)
          for index, racer in ipairs(racerList) do
            if racer.plID == id then
              return index
            end
          end
        end
    
    print(getRacerIndexById(racers, 12))
    

    【讨论】:

      【解决方案2】:

      想通了。

      racers = {}
      racers[1] = {plCP = 4, plID= 21}
      racers[2] = {plCP = 2, plID= 4}
      racers[3] = {plCP = 6, plID= 5}
      racers[4] = {plCP = 222, plID= 7}
      racers[5] = {plCP = 6, plID= 12}
      
      local index={}
      for i,d in pairs(racers) do
      for k,v in pairs(racers[i]) do
         index[v]=i
      end
      end
      
      return index[12]
      

      这将返回 5,这是我正在寻找的赛车手的索引。

      【讨论】:

      • 您的意思是index[d.plID] = i 吗?
      • @Egor 我和@987654323一起去了@我想他们做同样的事情?
      • 仅仅因为你得到一个看起来正确的数字并不意味着你的解决方案是正确的。切换赛车 2 和 1,然后检查 index[4]。您将获得带有 plID 21 的赛车 2 或带有 plID4 的赛车 1 ...想想您在内部 for 循环中正在做什么。您还使用 plCP 值作为表索引的键!!!
      • @Chase - 是的,这是一条通往相同结果的漫长道路 :-)
      • for i, racer in pairs(racers) do index[racer.plID] = i end 更快捷、更高效。您不必遍历赛车表中的每个字段。
      猜你喜欢
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多