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)


Използвайте хеш-таблица, за да преброите колко пъти виждате всяко font_name и преминете през 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