Mô đun:TableTools/tài liệu

Mô đun này bao gồm một số hàm để xử lý các bảng (table) Lua. Đây là một siêu mô đun (meta-module), được thiết kế để các mô đun Lua khác gọi và không nên được gọi trực tiếp từ invoke.
Tải mô đun
Để sử dụng bất kỳ hàm nào, trước tiên bạn phải tải mô đun.

local TableTools = require('Module:TableTools')

isPositiveInteger

TableTools.isPositiveInteger(value)

Trả về true nếu value là một số nguyên dương, và false nếu không phải. Mặc dù hàm này không thao tác trực tiếp trên các bảng, nó được đưa vào đây vì rất hữu ích để xác định xem một khóa bảng nhất định nằm trong phần mảng hay phần băm (hash) của bảng.
isNan

TableTools.isNan(value)

Trả về true nếu value là một giá trị NaN (Not a Number), và false nếu không phải. Mặc dù hàm này không thao tác trên các bảng, nó được đưa vào đây vì rất hữu ích để xác định xem một giá trị có thể là một khóa bảng hợp lệ hay không. (Lua sẽ báo lỗi nếu giá trị NaN được sử dụng làm khóa bảng.)
shallowClone

TableTools.shallowClone(t)

Trả về bản sao nông (shallow clone) của một bảng. Giá trị trả về là một bảng mới, nhưng tất cả các bảng con và hàm đều được chia sẻ (tham chiếu). Các metamethod được tôn trọng, nhưng bảng trả về sẽ không có metatable của riêng nó. Nếu bạn muốn tạo một bảng mới không chia sẻ các bảng con và có chuyển giao metatable, bạn có thể sử dụng mw.clone để thay thế. Nếu bạn muốn tạo một bảng mới không chia sẻ các bảng con và không chuyển giao metatable, hãy sử dụng deepCopy với tùy chọn noMetatable.
removeDuplicates

TableTools.removeDuplicates(t)

Loại bỏ các giá trị trùng lặp khỏi một mảng. Hàm này chỉ được thiết kế để hoạt động với các mảng tiêu chuẩn: các khóa không phải là số nguyên dương sẽ bị bỏ qua, cũng như tất cả các giá trị sau giá trị nil đầu tiên. (Đối với các mảng có chứa giá trị nil, bạn có thể sử dụng compressSparseArray trước). Hàm cố gắng bảo toàn thứ tự của mảng: giá trị không trùng lặp xuất hiện sớm nhất được giữ lại, và tất cả các giá trị trùng lặp sau đó sẽ bị xóa. Ví dụ, đối với bảng {{code|code={5, 4, 4, 3, 4, 2, 2, 1}|lang=lua}}, removeDuplicates sẽ trả về {{code|code={5, 4, 3, 2, 1}|lang=lua}}.
numKeys

TableTools.numKeys(t)

Nhận vào một bảng t và trả về một mảng chứa các số của bất kỳ khóa số nguyên dương nào có giá trị khác nil, được sắp xếp theo thứ tự số học. Ví dụ, đối với bảng {{code|code={'foo', nil, 'bar', 'baz', a = 'b'}|lang=lua}}, numKeys sẽ trả về {{code|code={1, 3, 4}|lang=lua}}.
affixNums

TableTools.affixNums(t, prefix, suffix)

Nhận vào một bảng t và trả về một mảng chứa các số của các khóa có tiền tố tùy chọn prefix và hậu tố tùy chọn suffix. Ví dụ, đối với bảng {{code|code={a1 = 'foo', a3 = 'bar', a6 = 'baz'}|lang=lua}} và tiền tố 'a', affixNums sẽ trả về {{code|code={1, 3, 6}|lang=lua}}. Tất cả các ký tự trong prefix và suffix đều được diễn giải theo nghĩa đen (không phải regex).
Xem và để thực hiện điều tương tự từ một bản mẫu wiki.
numData

TableTools.numData(t, compress)

Với một bảng có các khóa như "foo1", "bar1", "foo2", và "baz2", hàm trả về một bảng gồm các bảng con theo định dạng {{code|code={ [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }|lang=lua}}. Các khóa không kết thúc bằng một số nguyên được lưu trong một bảng con tên là "other". Tùy chọn compress sẽ nén bảng để có thể lặp qua bằng ipairs.
compressSparseArray

TableTools.compressSparseArray(t)

Nhận vào một mảng t có một hoặc nhiều giá trị nil, và loại bỏ các giá trị nil trong khi vẫn giữ nguyên thứ tự, để mảng có thể được duyệt an toàn bằng ipairs. Bất kỳ khóa nào không phải là số nguyên dương đều bị loại bỏ. Ví dụ, đối với bảng {{code|code={1, nil, foo = 'bar', 3, 2}|lang=lua}}, compressSparseArray sẽ trả về {{code|code={1, 3, 2}|lang=lua}}.
Xem để thực hiện điều tương tự từ một bản mẫu wiki.
sparseIpairs

TableTools.sparseIpairs(t)

Đây là một hàm lặp (iterator function) để duyệt một mảng thưa (sparse array) t. Nó tương tự như ipairs, nhưng sẽ tiếp tục lặp cho đến khóa số cao nhất, trong khi ipairs có thể dừng lại sau giá trị nil đầu tiên. Bất kỳ khóa nào không phải là số nguyên dương đều bị bỏ qua.
Thông thường sparseIpairs được sử dụng trong vòng lặp for chung.

for i, v in TableTools.sparseIpairs(t) do
-- khối mã lệnh
end

Lưu ý rằng sparseIpairs sử dụng hàm pairs trong quá trình thực thi. Mặc dù một số khóa bảng có vẻ bị bỏ qua, nhưng thực tế tất cả các khóa bảng đều được truy cập khi nó chạy.
size

TableTools.size(t)

Tìm kích thước của một bảng cặp khóa/giá trị (). Ví dụ, đối với {{code|code={foo = 'foo', bar = 'bar'}|lang=lua}}, size sẽ trả về 2. Hàm cũng hoạt động trên các mảng, nhưng đối với mảng, việc sử dụng toán tử sẽ hiệu quả hơn. Lưu ý rằng để tìm kích thước, hàm này sử dụng hàm pairs để lặp qua tất cả các khóa.
keysToList

TableTools.keysToList(t, keySort, checked)

Trả về danh sách các khóa trong một bảng, được sắp xếp bằng hàm so sánh mặc định hoặc hàm keySort tùy chỉnh. Hàm này tuân theo các quy tắc giống như hàm comp được cung cấp cho table.sort. Nếu keySort là false, việc sắp xếp sẽ không được thực hiện. Đặt checked thành true để bỏ qua kiểm tra kiểu nội bộ.
sortedPairs

TableTools.sortedPairs(t, keySort)

Lặp qua một bảng, với các khóa được sắp xếp bằng hàm keysToList. Nếu chỉ có các khóa số, dùng sparseIpairs có thể sẽ hiệu quả hơn.
isArray

TableTools.isArray(value)

Trả về true nếu value là một bảng và tất cả các khóa là các số nguyên liên tiếp bắt đầu từ 1.
isArrayLike

TableTools.isArrayLike(value)

Trả về true nếu value có thể lặp (iterable) và tất cả các khóa là các số nguyên liên tiếp bắt đầu từ 1.
invert

TableTools.invert(arr)

Hoán đổi các khóa và giá trị trong một mảng. Ví dụ, {{code|invert{ "a", "b", "c" }|lua}} cho kết quả {{code|code={ a=1, b=2, c=3 }|lang=lua}}.
listToSet

TableTools.listToSet(arr)

Tạo một tập hợp (set) từ phần mảng của bảng arr. Việc lập chỉ mục tập hợp bằng bất kỳ giá trị nào của mảng sẽ trả về true. Ví dụ, {{code|listToSet{ "a", "b", "c" }|lua}} cho kết quả {{code|code={ a=true, b=true, c=true }|lang=lua}}.
deepCopy

TableTools.deepCopy(orig, noMetatable, alreadySeen)

Tạo một bản sao của bảng orig. Giống như mw.clone, tất cả các giá trị không phải là hàm đều được sao chép và danh tính của các bảng được bảo toàn. Nếu noMetatable là true, thì metatable (nếu có) sẽ không được sao chép. Có thể sao chép các bảng được tải bằng mw.loadData.
Tương tự như mw.clone, nhưng mw.clone không thể sao chép các bảng được tải bằng mw.loadData và không cho phép tùy chọn không sao chép metatable.
sparseConcat

TableTools.sparseConcat(t, sep, i, j)

Nối tất cả các giá trị trong bảng được đánh chỉ mục bằng một số nguyên dương, theo thứ tự. Ví dụ, {{code|sparseConcat{ "a", nil, "c", "d" }|lua}} cho kết quả và {{code|sparseConcat{ nil, "b", "c", "d" }|lua}} cho kết quả .
length

TableTools.length(t, prefix)

Tìm độ dài của một mảng hoặc một bảng dạng mảng (quasi-array) với các khóa có tiền tố tùy chọn prefix như "data1", "data2", v.v... Nó sử dụng thuật toán tìm kiếm mũ để tìm độ dài, nhằm sử dụng ít thao tác tra cứu bảng nhất có thể.
Thuật toán này hữu ích cho các mảng sử dụng metatable (ví dụ: frame.args) và cho các bảng dạng mảng. Đối với các mảng thông thường, chỉ cần sử dụng toán tử , vì nó được triển khai bằng C và sẽ nhanh hơn.
inArray
TableTools.inArray(array, searchElement)
TableTools.inArray(array, searchElement, fromIndex)
Trả về true nếu searchElement là một thành viên của mảng array, và false nếu ngược lại. Tương đương với hàm Array.prototype.includes() của JavaScript, ngoại trừ việc fromIndex bắt đầu từ 1 thay vì bắt đầu từ 0.
fromIndex
fromIndex là chỉ mục bắt đầu tìm kiếm tùy chọn (bắt đầu từ 1). Nếu fromIndex không hiện diện, tất cả các giá trị trong mảng sẽ được tìm kiếm và mảng sẽ được xử lý như một bảng/mảng liên kết (nó sẽ được lặp qua bằng pairs()).
Nếu fromIndex hiện diện và là một số nguyên, mảng được coi là một mảng/chuỗi/danh sách thông thường (được đánh chỉ mục bằng các khóa số nguyên liên tiếp bắt đầu từ 1, và được lặp qua bằng ipairs()). Chỉ các giá trị có chỉ mục từ fromIndex trở lên mới được tìm kiếm.
Trong các ví dụ sau, array đại diện cho độ dài của phần khóa số nguyên của mảng.
Nếu fromIndex , nó sẽ đếm ngược từ cuối mảng, ví dụ: giá trị -1 sẽ chỉ tìm kiếm phần tử có khóa số nguyên cuối cùng trong mảng. Nếu fromIndex , toàn bộ phần khóa số nguyên của mảng sẽ được tìm kiếm.
Nếu fromIndex = 0, nó sẽ được coi là 1 và toàn bộ phần khóa số nguyên của mảng sẽ được tìm kiếm.
Nếu fromIndex > array, mảng sẽ không được tìm kiếm và trả về false.
merge

TableTools.merge(...)

Với đầu vào là các mảng, trả về một mảng chứa các phần tử của từng mảng đầu vào theo thứ tự nối tiếp.
extend

TableTools.extend(arr1, arr2)

Mở rộng mảng đầu tiên tại chỗ (in-place) bằng cách nối thêm tất cả các phần tử từ mảng thứ hai vào.
Xem thêm