2011-07-18 7 views
2

ので、私はこのようにそれから情報を得ることができ、いくつかのテーブルを作成する必要があります。Luaの高度な表の作成

table[attacker][id] 

を私は

print(table[attacker][id]) 

を使用します場合には、値を印刷する必要があります

は、多くの方法を試してみましたが、何か良い...

私はそれがこのようなものになる必要がありますね

...

table.insert(table, attacker, [id] = value) 

^これは動作しませんを発見していません。

誰かが私を助けることができますか?


編集

まあ、私はそれをこのようにしようとすると:

x = {} 
function xxx() 
    if not x[attacker][cid] then 
     x[attacker][cid] = value 
    else 
     x[attacker][cid] = x[attacker][cid] + value 
    end 
    print(x[attacker][cid]) 
end 

を私はというエラーが出ます: '?' インデックスフィールドへ

試みを(ゼロ値)

+1

そのエラーは、正確には何かを意味します...'x [attacker]'は明らかに 'nil'です。 – Amber

答えて

5

あなたは、内部テーブルを作成するために、中括弧を必要とする:

table.insert(my_table, attacker, {[id]=value}) 

または

-- the advantage of this is that it works even if 'attacker' isn't a number 
my_table[attacker] = {[id]=value} 

a = 1 
b = 2 
c = 3 
d = {} 
table.insert(d, a, {[b]=c}) 
print(d[a][b]) -- prints '3' 
+0

これは、 'attacker'が整数の場合にのみ機能します。これは、table.insertはテーブルの配列部分に値を挿入するためです。 –

+0

確かに。もちろん、通常のテーブル代入構文は非整数キーに対しても機能します。私はOPの例を、動作する最も近いものに単純に適用していました。 – Amber

+0

は私の質問を編集しました。 – Lucas

2

attackerで何を?つまり、それにはどのような価値が含まれていますか? 実際にはは含まれていません。なぜなら、Luaテーブルは任意のLua値をキーとして使用できるからです。しかし知っておくと便利です。

いずれにしても、それは本当に簡単です。あなたは上記のステップ2の注意を取らなかったので

tableName = {}; --Note: your table CANNOT be called "table", as that table already exists as part of the Lua standard libraries. 
tableName[attacker] = {}; --Create a table within the table. 
tableName[attacker][id] = value; --put a value in the table within the table. 

あなたの編集で問題が起こりました。 Luaテーブルの値は、それらが値を持つまで空(nil)です。したがって、2行目までは、tableName[attacker]で、となります。 nil値はインデックスできません。したがって、である必要があります。tableNameのインデックスは、実際にはテーブルにあります。

tableName[attacker][id]は、type(tableName[attacker]) == "table"が真でない限り、実行できません。

+0

編集された私の質問 – Lucas

1

table = {['key']='value'}を使用すると簡単になります。

関連する問題