質問

い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)

他のヒント

Komelが言ったように、

、あなたは何の保証秩序を持っていない連想配列、を扱っている。

また、連想配列の機能を維持しながら、あなたがそれに関連付けられた値に基づいてキーの順序付けをしたい場合、あなたはこのような何かを行うことができます:

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が推奨する方法を用いて配列をソートする可能性を認識しなかった。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top