Lua Bandingkan Beberapa Nilai Tabel

Halo, saya punya Tabel seperti

list[i].font_name

Saya adalah angka yang tidak ditentukan, saya ingin mengurai melalui tabel dan membandingkan jika ada yang memiliki string yang sama. Kemudian ubah stringnya

Menyukai

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

Bisa ada lebih dari satu kecocokan yang serupa

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

. Terima kasih atas waktunya menjawab pertanyaan di web :) Selamat Natal


person Cacilda    schedule 25.12.2020    source sumber
comment
dan apa pertanyaanmu? Anda sepertinya tahu cara memeriksa apakah dua nilai sama. dan tugas sepele melintasi tabel dijelaskan dalam tutorial/buku Lua mana pun di luar sana.   -  person Piglet    schedule 25.12.2020


Jawaban (1)


Gunakan tabel hash untuk menghitung berapa kali Anda melihat setiap font_name dan mengulang list. Ini berhasil, karena jika dua nilai dibandingkan sebagai sama (tanpa metametode), keduanya dianggap sebagai kunci yang sama.

-- 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
Terima kasih Luther telah menjawab saya, ini berhasil :) Saya sebelumnya membuat solusi lain dengan dua loop for yang kemudian membandingkan setiap item di tabel dan jika menemukan duplikat maka akan diganti namanya. Karena milik Anda hanya menggunakan satu for loop, saya pikir ini akan lebih cepat, tetapi saya membandingkannya dan yang mengejutkan ternyata lebih lambat dari dua for loops. Bagaimanapun saya akan mengingat trik itu, terima kasih !!! :) - person Cacilda; 26.12.2020