0

私はluaを初めて使用し、テーブルを作成する予定です。このテーブル (私はテストと呼んでいます) には 200 のエントリがあります - 各エントリには同じサブエントリがあります (この例では、サブエントリ money と age):

これは一種の疑似コードです:

table test = {
    Entry 1: money=5 age=32
    Entry 2: money=-5 age=14
    ...
    Entry 200: money=999 age=72
}

これを lua でどのように書くことができますか? 可能性はありますか?もう 1 つの方法は、各サブエントリを 1 つのテーブルとして記述することです。

table money = { }
table age = { }

しかし、私にとっては、これは良い方法ではないので、あなたが私を助けてくれるかもしれません.

編集:

この質問Table inside a tableが関係しているのですが、この 200x が書けません。

4

3 に答える 3

4

次の構文を試してください。

test = {
  { money = 5, age = 32 },
  { money = -5, age = 14 },
  ...
  { money = 999, age = 72 }
}

使用例:

-- money of the second entry:
print(test[2].money) -- prints "-5"

-- age of the last entry:
print(test[200].age) -- prints "72"
于 2012-10-02T11:39:19.123 に答える
0

問題を脇に置いて、test:moneyに2 つのシーケンスをage持ち、各エントリが両方の配列で同じインデックスを持つようにすることもできます。

test = {
   money ={1000,100,0,50},
   age={40,30,20,25}
}

3テーブルではなくテーブルのオーバーヘッドしかないため、これはパフォーマンスが向上します。n+1ここnで、エントリの数です。

とにかく、何らかの方法でデータを入力する必要があります。通常行うことは、CSV、XML などの簡単に解析できる形式を使用して、それをテーブルに変換することです。このような:

s=[[
1000 40
 100 30
   0 20
  50 25]]
test ={ money={},age={}}
n=1
for balance,age in s:gmatch('([%d.]+)%s+([%d.]+)') do
   test.money[n],test.age[n]=balance,age
   n=n+1
end 
于 2012-10-02T12:43:10.157 に答える
0

「お金」と「年齢」を200倍書きたくないということですか?

いくつかの解決策がありますが、次のように書くことができます。

local test0 = {
  5, 32,
  -5, 14,
  ...
}

local test = {}

for i=1,#test0/2 do
  test[i] = {money = test0[2*i-1], age = test0[2*i]}
end

それ以外の場合は、いつでもメタテーブルを使用して、希望どおりに動作するクラスを作成できます。

于 2012-10-02T15:42:45.887 に答える