Lua เปรียบเทียบค่าหลายตาราง

สวัสดี ฉันมีโต๊ะเหมือน

list[i].font_name

ฉันเป็นตัวเลขที่ไม่ได้กำหนด ฉันต้องการแยกวิเคราะห์ตารางและเปรียบเทียบว่ามีตัวเลขใดที่มีสตริงเหมือนกันหรือไม่ จากนั้นจึงเปลี่ยนสตริง

ชอบ

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 loop ฉันคิดว่ามันจะเร็วกว่า แต่ฉันเปรียบเทียบมันและน่าประหลาดใจที่มันช้ากว่าสอง for loops ยังไงก็จะเก็บทริคนั้นไว้ครับ ขอบคุณครับ!!! :) - person Cacilda; 26.12.2020