2010-12-04 3 views
2

У меня есть таблица, которая содержит 4 значения.Randoming значение из таблицы, а затем удалить его в Lua

Например:

2 
4 
1 
3 

Я использую функцию пошагово таблицы ищет, позволяет сказать, номер 1, используя пар и получить позицию его в таблице.

Затем я использую table.remove, чтобы удалить 1 с этой позиции. То, что я хотел бы сделать сейчас, чтобы сжать таблицу таким образом, что это 3 значения длинных

2 
4 
3 

Я довольно новый для Lua так быть нежным со мной. :)

Что у меня есть довольно много это:

CloseRandomConsole = math.random(1,(#ConsoleTable)) 

If CloseRandomConsole == 1 then 
for key, value in pairs(ConsoleTable) do 
if value == "1" then 
    table.remove(ConsoleTable, key) 
break 
end 
end 

Я вижу, куда я иду неправильно, но я не Хэ ни малейшего представления о том, как решить эту проблему.

math.random(1,(#ConsoleTable)) 

Я только хочу, чтобы иметь возможность случайного между одним из значений в таблице. И когда я проверил это vlue, я хочу, чтобы оно было удалено, так что я останусь с тремя другими значениями в случайном порядке.

Я вас смущаю? :)

+2

Я уверен, что ваши пальцы просто поскользнулись на клавиатуре и набрали «LUA» вместо «Lua» :) – Gemini14 2010-12-05 00:02:50

ответ

2

table.remove(ConsoleTable, key) действительно удалит одно значение из таблицы, уменьшив его размер на 1. Таким образом, в следующий раз, когда вы вызовете math.random(1,(#ConsoleTable)), его диапазон будет меньше на единицу. Честно говоря, похоже, что у вас все в порядке, и я не уверен, в чем проблема.

Редактировать: Как насчет этого однострочного лайнера?

table.remove(ConsoleTable, math.random(1, #ConsoleTable)) 

Я думаю, что это удалит одну «консоль» наугад из таблицы. Возможно, если вы можете попробовать это, и если это не то, что вы хотите, подробно объясните, что не так, мы можем попробовать больше.

+0

math.random (1, (# ConsoleTable)), где я ошибаюсь, я думаю. – Vitae 2010-12-04 17:01:29

2

Как правило, считается неправильной практикой программирования, чтобы удалить элемент из таблицы во время итерации по нему. Многие языки очень смущены этим. Если вы действительно хотите это сделать, вам лучше создать вторую зеркальную таблицу, а затем повторить ее, удалив элементы из исходной таблицы.

Однако, я бы предложил сохранить состояние консолей в таблице и установить один на неактивный (возможно, состояние 0) и оставить остальные активными (состояние 1). Затем игрок может установить некоторые из активных, и босс затем выбирает один из них и деактивирует его снова. Вам понадобится еще несколько строк кода, но это должно быть более гибким и понятным.