web-dev-qa-db-ja.com

luaでテーブルの内容を表示する

私がやろうとしていることは、Luaで次のコードを使用してテーブルの内容を表示することです。

local people = {
   {
   name = "Fred",
   address = "16 Long Street",
   phone = "123456"
   },

   {
   name = "Wilma",
   address = "16 Long Street",
   phone = "123456"
   },

   {
   name = "Barney",
   address = "17 Long Street",
   phone = "123457"
   }

}
for k, v in pairs(people ) do
    print(k, v)
end

私が得た出力は:

1   table: 0x9a2d8b0
2   table: 0x9a2d110
3   table: 0x9a2cb28
10
Neenu

ネストされたテーブルを表示するには、ネストされたループを使用する必要があります。

また、 ipairs を使用してarrayのようなテーブルを反復処理し、 pairsrecordのようなテーブルを反復処理します。

local people = {
   {
       name = "Fred",
       address = "16 Long Street",
       phone = "123456"
   },
   {
       name = "Wilma",
       address = "16 Long Street",
       phone = "123456"
   },
   {
       name = "Barney",
       address = "17 Long Street",
       phone = "123457"
   }
}

for index, data in ipairs(people) do
    print(index)

    for key, value in pairs(data) do
        print('\t', key, value)
    end
end

出力:

1   
        phone   123456          
        name    Fred            
        address 16 Long Street          
2   
        phone   123456          
        name    Wilma           
        address 16 Long Street          
3   
        phone   123457          
        name    Barney          
        address 17 Long Street  
12
Oka

これにより、テーブルが再帰的にシリアル化されます。このコードのバリアントを使用して、テーブルからJSONを生成できます。

function tprint (tbl, indent)
  if not indent then indent = 0 end
  local toprint = string.rep(" ", indent) .. "{\r\n"
  indent = indent + 2 
  for k, v in pairs(tbl) do
    toprint = toprint .. string.rep(" ", indent)
    if (type(k) == "number") then
      toprint = toprint .. "[" .. k .. "] = "
    elseif (type(k) == "string") then
      toprint = toprint  .. k ..  "= "   
    end
    if (type(v) == "number") then
      toprint = toprint .. v .. ",\r\n"
    elseif (type(v) == "string") then
      toprint = toprint .. "\"" .. v .. "\",\r\n"
    elseif (type(v) == "table") then
      toprint = toprint .. tprint(v, indent + 2) .. ",\r\n"
    else
      toprint = toprint .. "\"" .. tostring(v) .. "\",\r\n"
    end
  end
  toprint = toprint .. string.rep(" ", indent-2) .. "}"
  return toprint
end

これを通してあなたのテーブルを走らせる:

 local people = {
   {
   name = "Fred",
   address = "16 Long Street",
   phone = "123456"
   },

   {
   name = "Wilma",
   address = "16 Long Street",
   phone = "123456"
   },

   {
   name = "Barney",
   address = "17 Long Street",
   phone = "123457"
   }

}


print (tprint(people))

これを生成します:

  {
  [1] =     {
      name= "Fred",
      phone= "123456",
      address= "16 Long Street",
    },
  [2] =     {
      name= "Wilma",
      phone= "123456",
      address= "16 Long Street",
    },
  [3] =     {
      name= "Barney",
      phone= "123457",
      address= "17 Long Street",
    },
}
8
Luiz Menezes

データレコードに静的な定義済みフィールド名がある場合、このより単純なバージョンがうまくいく場合があります。

for i,t in ipairs(people) do
  print('Record',i)
  print('Name',t.name)
  print('Address',t.address)
  print('Phone',t.phone)
  print()
end
4
tonypdmtr

IDEあなたはどのように作業しているのかわかりません。しかし、何らかの理由で、あなたとこのスレッドを見つけた他の誰もがVisual Studio Codeで作業しています Lua Debug拡張機能 は、作成したカスタムテーブルのすべての連想配列の値を表示するのに役立ちます。

私が本当に気に入っているのは、初期値だけでなく、後で値を変更する場合でも、この拡張機能を使用して、[デバッグコンソール]タブから調整を表示できることです。

私はあなたの正確な例を取り、人々をデバッグに単にタイプし、そして表示されたすべての値に行きます。

0
klewis