Associativelyソートテーブルによる価値Lua
質問
いkey=>値テーブルい順に並び替えます。Lua.キーのすべての整数でな連続(て意味).Luaのだけを並べ替え機能が table.sort
, り、扱うテーブルとして簡単な配列の場合は、破棄、元のキーとそのキー協会、特定の項目です。ではなく、私的な使用できる PHPの asort()
機能です。
私:
items = {
[1004] = "foo",
[1234] = "bar",
[3188] = "baz",
[7007] = "quux",
}
だいた後に並べ替え:
items = {
[1234] = "bar",
[3188] = "baz",
[1004] = "foo",
[7007] = "quux",
}
そのアイデア?
編集: に基づく回答を行っていることによるものだけで奇ゴの特定の組み込みLua通訳の仕事をしていき、ものすべての試験 pairs()
常に返されますテーブルの項目の順番でしたテーブルに追加されます。(の宣言が繰り返し処理を実行し異なる).
ただ残念なことに、う機会を設けていきたいと思い通常の動作のようになっている必要;Luaを持っていないので必要とされるツール内蔵のコースに組み込み環境でも私の仕事であるといわれている。
まだ、すごい!
解決
あなたは何かを誤解しているようです。あなたがここに持っていることは連想配列です。連想配列は、例えば、それらに明示的な順序がありませんそれはそれらを発注する(通常はソート)のみ内部表現です。
要するに - Luaのでは、あなたが投稿された配列の両方の同じの
。あなたの代わりにしたいと思う何、このような表現です。
items = {
{1004, "foo"},
{1234, "bar"},
{3188, "baz"},
{7007, "quux"},
}
あなたは今、インデックスでそれらを得ることはできませんが、(彼らは4、3、2、1インデックスが作成されていますが、は別のインデックス配列を作成することができます<全角>)、あなたはtable.sort
を使用してそれらを並べ替えることができます。
ソート機能は、次のようになります:
function compare(a,b)
return a[1] < b[1]
end
table.sort(items, compare)
他のヒント
、あなたは何の保証秩序を持っていない連想配列、を扱っている。
また、連想配列の機能を維持しながら、あなたがそれに関連付けられた値に基づいてキーの順序付けをしたい場合、あなたはこのような何かを行うことができます:
function getKeysSortedByValue(tbl, sortFunction)
local keys = {}
for key in pairs(tbl) do
table.insert(keys, key)
end
table.sort(keys, function(a, b)
return sortFunction(tbl[a], tbl[b])
end)
return keys
end
items = {
[1004] = "foo",
[1234] = "bar",
[3188] = "baz",
[7007] = "quux",
}
local sortedKeys = getKeysSortedByValue(items, function(a, b) return a < b end)
sortedKeys {1234,3188,1004,7007}で、あなたはそうのようなあなたのデータにアクセスすることができます:
for _, key in ipairs(sortedKeys) do
print(key, items[key])
end
結果:
1234 bar
3188 baz
1004 foo
7007 quux
うーん、反復処理を制御することができないことに関する部分を逃しました。そこに
しかし、LUAは常に通常の方法があります。
http://lua-users.org/wiki/OrderedAssociativeTableする
開始厥。今、あなたは、ライブラリが使用する()のペアを交換する必要があります。これは、ペアの=のmy_pairsとして最も単純である可能性があります。その後、
上記のリンク内の溶液を使用することができますPHPの配列が異なるからLuaます。
PHPの配列の場合 順序付きリスト キーと値のペアになっています。
るユーザテーブルが含まれてい 順序付けセット キーと値のペアになっています。
るユーザテーブルとして配列の場合プログラマーを選択利用の整数で1,2,3,...しています。言語の文法や標準ライブラリの機能など table.sort
特別支援テーブルの連続-整鍵となります。
だいたい似たPHPの配列かできない表現を使ってリストのサーバ上にkey-value形式で格納する場合には,テーブルのテーブルでよりもさらに新しいリストとしてのキーと値のペアになっています。パスカスタム"による"機能 table.sort
きすべてのセットです。
N.B.Luaできる ミックス 連続-整数キーのその他の種類の鍵の 同 テーブルの表現は効率的です。私はこの機能を使用時には、通常のタグ配列、数個のメタデータを指すものとします。
同じクエリで、数ヵ月後にこれに来ます。お勧めの答えは、必要な、これはLUAでどのように見えるかされたものとのギャップを特定するように見えたが、それは正確にした後、私が何であったか、私を取得できませんでした: - 。キーでソートハッシュあった。
このページの最初の三つの機能が、しかし、DID: http://lua-users.org/wiki/ SortedIterationする
私は数年前にコーディングのLuaの簡単なビットしなかったが、私はそれにもはや堪能しています。
同様の問題に直面したとき、、私はキーと値を持つ別の配列への私の配列は新しい配列にsort
を使用し、その後、逆にコピーされました。
私はKornel Kisielewiczが推奨する方法を用いて配列をソートする可能性を認識しなかった。