質問

私は、テーブルエントリのインデックスを取得することはできません。私はそれがテーブルから項目を削除する必要があります。

私は、テーブルにエントリを追加するtable.insertを使用します。

もう一つの質問:?1が連想インデックスでアイテムを削除することができますので、Luaが関数table.removeに「過負荷」を持っていない理由

役に立ちましたか?

解決

t[k]=nil削除しtからキーkのエントリます。

2番目の質問については、答えはテーブルは、個々のメタテーブルを持つことができるということです。

他のヒント

表は、キーと値の間の多くの関係に順序付けられていないものを実装します。換言すれば、任意の特定のキー(インデックス)は、一度だけテーブルに表示することができ、その値は、複数回出現することができます。

あなたがキーkを知っている場合は、

、そしてt[k] = nilは、キーとテーブルから関連する値の両方を削除します。しかし、この操作は、テーブル内の他の任意のキーまたは値に影響を及ぼさない。

table.inserttable.remove機能は、アレイまたはリストを実装するために慣例的に使用されている1から始まるシーケンシャル整数キーのセットに対して動作します。穴を開発してから、リストを保持するようにその目的のために、彼らは、リスト内の他の値を操作します。

は、いくつかの値が発見されたキーを見つけるための1つの方法は、単純にテーブルを検索することです。これは複数回行われる場合、価値によってそのルックアップがインデックスによって検索の速さになるように反転するキー/値ペアに、第2のテーブルを構築するために、おそらく良いアイデアです。

適切な実装では、あなたの仮定やニーズに依存します。いくつかのサンプルがあります:

-- return the first integer index holding the value 
function AnIndexOf(t,val)
    for k,v in ipairs(t) do 
        if v == val then return k end
    end
end

-- return any key holding the value 
function AKeyOf(t,val)
    for k,v in pairs(t) do 
        if v == val then return k end
    end
end

-- return all keys holding the value
function AllKeysOf(t,val)
    local s={}
    for k,v in pairs(t) do 
        if v == val then s[#s+1] = k end
    end
    return s
end

-- invert a table so that each value is the key holding one key to that value 
-- in the original table.
function Invert(t)
    local i={}
    for k,v in pairs(t) do 
        i[v] = k
    end
    return i
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top