Случайное значение из таблицы, а затем удалить его в Lua - PullRequest
2 голосов
/ 04 декабря 2010

У меня есть таблица, которая содержит 4 значения.

Например:

2
4
1
3

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

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

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 

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

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

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

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

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

2 голосов
/ 04 декабря 2010

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

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

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

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

...