Lua Порівняння кількох значень таблиці

Привіт, у мене є такий стіл

list[i].font_name

i — невизначене число, я хочу проаналізувати таблицю та порівняти, чи є в ній такий самий рядок. Потім змініть рядок

Люблю

if list[1].font_name == list[2].font_name then  
  list[2].font_name = list[2].font_name..'2'
end

Таких збігів може бути більше одного

list[1].font_name
list[2].font_name
list[3].font_name

. Дякуємо всім за час, щоб відповісти на запитання в Інтернеті :) Веселого Різдва


person Cacilda    schedule 25.12.2020    source джерело
comment
і яке твоє питання? Ви, здається, знаєте, як перевірити, чи два значення рівні. і тривіальне завдання обходу таблиці пояснюється в будь-якому підручнику/книзі Lua.   -  person Piglet    schedule 25.12.2020


Відповіді (1)


Використовуйте хеш-таблицю, щоб підрахувати, скільки разів ви бачите кожну назву шрифту, і прокрутіть list. Це працює, тому що якщо два значення порівнюються як рівні (без метаметоду), вони вважаються одним ключем.

-- This keeps track of duplicates.
local counter = {}

for i, v in ipairs(list) do
  local font = v.font_name

  -- Increment the count for this font.
  local count = (counter[font] or 0) + 1
  counter[font] = count

  if count > 1 then
    v.font_name = font .. count
  end
end
person luther    schedule 25.12.2020
comment
Дякую Лютеру, що відповів мені, це працює :) Раніше я створив інше рішення з двома циклами for, які потім порівнюють кожен елемент у таблиці, і якщо знаходять дублікат, перейменовують. Оскільки у вас використовується лише один цикл for, я думав, що це буде швидше, але я перевірив його, і на диво він йшов повільніше, ніж два цикли for. У будь-якому разі я буду пам’ятати про цей трюк, дякую!!! :) - person Cacilda; 26.12.2020