Найти повторяющиеся значения в таблице Lua - PullRequest
1 голос
/ 29 марта 2020

У меня есть таблица Lua, которая автоматически генерирует значения X и Y, я пытаюсь сделать так, чтобы, если значение X совпадает с другим значением X в таблице, оно что-то делает, что-то прямо сейчас не важно, единственные ответы, которые я нахожу, - это если вы уже знаете, что находится в таблице, например, «оранжевый», «синий», который мне не интересен.

Итак, допустим, у меня есть множество число, генерируемое в таблицу. Как проверить соответствие значения в этой таблице, которое может быть сгенерировано позднее во время выполнения. Мои значения x, y уже округлены до 2 десятичных знаков ie: 1.10. И мои значения x и y уже генерируются в таблицу.

Мой код

Во время запуска

positiontableX = {}
positiontableY = {}

Во время выполнения

newxpos = math.floor (a[1] * 100)/100
newypos = math.floor (a[2] * 100)/100
table.insert (positiontableX, 1, newxpos)
table.insert (positiontableY, 1, newypos)

С точки зрения данных, которые генерируются в таблице, это еще одна часть кода, которую мне не нужно здесь добавлять.

1 Ответ

0 голосов
/ 29 марта 2020

Вот интересное, хотя и небольшое решение. Здесь я предполагаю, что вы не хотите перезаписывать какие-либо значения: если вы получаете дубликат, вы хотите добавить его в таблицу и продолжать двигаться дальше. Чтобы решить эту проблему, я буду использовать решение 'значения в качестве ключей' , чтобы мгновенно проверить, существует ли значение (без зацикливания), но использовать две отдельные таблицы, чтобы ничего не перезаписывать.

local positiontableX = {} --an array where values are stored as values
local heldposX = {} --an array where values are stored as indexes
a = {1, 2, 3, 4, 3, 5, 7, 2, 7, 10}

for i = 1, 10 do
  local newxpos = math.floor (a[i] * 100)/100
  if heldposX[newxpos] == nil then  --if this value has never been added yet
    print("new x value " .. newxpos)
    heldposX[newxpos] = true        --add it
  else                              --if this value has been added before
    print("duplicate x value " .. newxpos)
  end
  table.insert (positiontableX, 1, newxpos) --add value to position table
end

Вывод

new x value 1.0
new x value 2.0
new x value 3.0
new x value 4.0
duplicate x value 3.0
new x value 5.0
new x value 7.0
duplicate x value 2.0
duplicate x value 7.0
new x value 10.0

Подводя итог, здесь используются две таблицы для каждого списка x и y pos. Вы добавите значения к каждому из них, но с помощью одного из них определите, есть ли это значение, поэтому вы можете написать сценарий для выполнения чего-то особенного (обратите внимание, что в моем примере я добавляю значения в positiontableX после выполнения сценария, чтобы сделать если он уже существует, но вы можете изменить это, перемещаясь по линиям).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...