3
local tile = {"C", "O", "L", "I", "N", "F", "A", "R", "R", "E", "L", "L"}       
table.sort(tile, function(a,b) return ( math.random(1,2) <2) end)
print ( 'table: '..table.concat( tile, ', '))

テーブルの順序をランダム化していますが、これは正常に動作しているように見えますが、プログラムを 2 回実行するたびにこのエラーが発生します: invalid order function for sorting. 何が起こっているかについて何か提案はありますか?

これに対する解決策を見つけました。 http://developer.coronalabs.com/code/shufflerandomize-tables これにより、上記の方法の問題なしにテーブルの内容がシャッフルされます。

4

2 に答える 2

4

配列をシャッフルしたい場合は、私の shuffle snippetをご覧ください。

主なアイデアは、乱数を使用してアイテムのテーブルを作成し、元のインデックスを維持しながらそれを並べ替え、新しい順序に従ってアイテムを並べ替えるというものです。

function shuffled(tab)
    local n, order, res = #tab, {}, {}
    for i=1,n do order[i] = { rnd = math.random(), idx = i } end
    table.sort(order, function(a,b) return a.rnd < b.rnd end)
    for i=1,n do res[i] = tab[order[i].idx] end
    return res
end
于 2012-12-28T12:14:02.040 に答える
1

に指定されたソート関数table.sortは、同じ引数のペアに対して常に同じ結果を返すという意味で決定論的であると見なされ、 と が意味する意味で一貫性があると見なさa<bb<cますa<c

于 2012-12-18T11:18:39.207 に答える