2011-07-08 24 views
8

Tôi có một bảng chuỗi. Tôi muốn một cách dễ dàng để loại bỏ tất cả các bản sao của bảng.Lua: Cách thông minh nhất để thêm vào bảng nếu chưa có trong bảng hoặc xóa các bản sao

Vì vậy, nếu bảng là {a, b, c, c, d, e, e}, sau khi hoạt động này nó sẽ là {a, b, c, d, e}

Ngoài ra, và có lẽ tốt nhất, là có một cách để thêm một yếu tố vào một bảng, nhưng chỉ khi nó chưa được chứa bên trong bàn.

< \ noobquestion>

Trả lời

7

Những gì tôi thường làm cho điều này chỉ là bảng trên chuỗi ví dụ như vậy

tbl[mystring1] = 1 
tbl[mystring2] = 1 

, vv

Khi bạn thêm một chuỗi bạn chỉ cần sử dụng các dòng ở trên và các bản sao sẽ được xử lý. Sau đó bạn có thể sử dụng một cho ... cặp làm vòng lặp để đọc dữ liệu.

Nếu bạn muốn đếm số lần xuất hiện

sử dụng một cái gì đó giống như

if tbl[mystring1] == nil then 
    tbl[mystring1] = 1 
else 
    tbl[mystring1] = tbl[mystring1] + 1 
end 

Khi kết thúc chu kỳ Ngoài ra nếu bạn cần bật bảng xung quanh bạn chỉ có thể sử dụng giống như

newtbl = {} 
for s,c in pairs(tbl) do 
    table.insert(newtbl,s) 
end 
8

Có vẻ như bạn đang cố gắng để thực hiện một Set, một tập hợp các yếu tố độc đáo. Bài viết này có thể giúp bạn: http://www.lua.org/pil/13.1.html

4

Cách đơn giản nhất là sử dụng các bảng làm khóa, không phải là giá trị, trong "bảng chứa" của bạn.

Hãy gọi bảng vùng chứa values. Bạn hiện đang phải làm một cái gì đó tương tự như sau để thêm các yếu tố để nó:

table.insert(values, value) 

Và bạn phân tích values như thế này:

for i,v in ipairs(values) do 
    -- v contains the internal values 
end 

Để có các bảng chỉ một lần, bạn có thể chèn chúng này theo cách khác:

t[value] = 1 

Điều này sẽ đảm bảo rằng giá trị được chèn (chuỗi, bảng, số, bất kỳ) được bao gồm chỉ một lần, vì chúng sẽ bị 'ghi đè'.

Sau đó, bạn có thể phân tích t như thế này:

for k,_ in pairs(values) do 
    -- k contains the internal tables 
end 
Các vấn đề liên quan