2

新しい要素をキューに追加するたびに、キューを反復処理できるようにしたいのですが、処理した要素を削除します。

queue = [[0,8],[1,2],[2,4]]

for [x,y] in queue
    for i in [1,2,3]
        # Do something that results in a new coordinate..
        queue.push([newx,newy])

問題は、これを行う最善の方法が何であるかがわからないことです。

繰り返しながら配列から各要素を削除すると、配列に空の要素が残ります。

配列をコピーし、それを空にしてqueue.length = 0からコピーを反復すると、配列にオブジェクトが含まれているとスライスをコピーしても機能しないため、機能しません。

これを行う正しい方法は何ですか?

4

2 に答える 2

1
queue = [[0,8],[1,2],[2,4]]

for [x,y], i in queue
  queue[i] = [x-1,y+1]

console.log queue  #=> [ [ -1, 9 ], [ 0, 3 ], [ 1, 5 ] ]

for-事前にキャッシュされているため、inターゲットを変更する操作には適していません。.lengthインラインで更新するには、次のように記述する必要があります。

queue = [[0,8],[1,2],[2,4]]

i = -3
while point = queue[i += 3]
  [x,y] = point
  queue[i..i] = ([x-j,y+j] for j in [1,2,3])

console.log queue
#=> [[-1,9],[-2,10],[-3,11],[0,3],[-1,4],[-2,5],[1,5],[0,6],[-1,7]]
于 2011-05-10T22:12:50.887 に答える