Mô đun:TableTools/tài liệu
| Đây là một trang con tài liệu dành cho Mô đun:TableTools. Nó gồm có các thông tin hướng dẫn sử dụng, thể loại và các nội dung khác không thuộc về phần trang mô đun gốc. |
| Mô đun Lua này được sử dụng trong thông báo hệ thống, và ở khoảng 726.000 trang, chiếm ≈ 16% tổng số trang. Thay đổi đến nó có thể dẫn đến thay đổi ngay lập tức giao diện người dùng Wikipedia. Để tránh gây lỗi trên quy mô lớn và tải máy chủ không cần thiết, tất cả thay đổi cần được thử nghiệm ở trang con /sandbox, /testcases của mô đun, hoặc ở chỗ thử mô đun. Các thay đổi đã được thử nghiệm có thể thêm vào mô đun bằng một sửa đổi duy nhất. Xin hãy thảo luận các thay đổi tại trang thảo luận trước khi áp dụng sửa đổi. |
| Mô đun này được xếp loại là đã sẵn sàng để sử dụng rộng rãi. Nó đã đạt đến mức độ hoàn thiện, được coi là khá ổn định và không có lỗi, và có thể được sử dụng bất kỳ chỗ nào nếu phù hợp. Nó có thể được nêu trên các trang trợ giúp cũng như các tài liệu Wikipedia khác làm tùy chọn tìm hiểu cho người dùng mới. Để giảm tải tài nguyên máy chủ và tránh tạo đầu ra gây hại, mọi cải tiến nên được thực hiện thông qua việc kiểm thử tại chỗ thử thay vì sửa đổi "thử và sai" lặp đi lặp lại liên tục. |
| Bản mẫu này sử dụng Lua: |
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 {5, 4, 4, 3, 4, 2, 2, 1}, removeDuplicates sẽ trả về {5, 4, 3, 2, 1}.
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 {'foo', nil, 'bar', 'baz', a = 'b'}, numKeys sẽ trả về {1, 3, 4}.
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 {a1 = 'foo', a3 = 'bar', a6 = 'baz'} và tiền tố 'a', affixNums sẽ trả về {1, 3, 6}. 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 {{#invoke:params|call_for_each_group}} và {{#invoke:params|grouping_by_calling}} để 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 { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }. 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 {1, nil, foo = 'bar', 3, 2}, compressSparseArray sẽ trả về {1, 3, 2}.Xem {{#invoke:params|squeezing}} để 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ệnhendLư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ị (mảng liên kết). Ví dụ, đối với {foo = 'foo', bar = 'bar'}, 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ụ, invert{ "a", "b", "c" } cho kết quả { a=1, b=2, c=3 }.
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ụ, listToSet{ "a", "b", "c" } cho kết quả { a=true, b=true, c=true }.
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ụ, sparseConcat{ "a", nil, "c", "d" } cho kết quả "acd" và sparseConcat{ nil, "b", "c", "d" } cho kết quả "bcd".
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 < 0, nó sẽ đếm ngược từ cuối mảng, ví dụ: giá trị-1sẽ chỉ tìm kiếm phần tử có khóa số nguyên cuối cùng trong mảng. NếufromIndex <= (-1 * #array), 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à1và 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
- {{#gọi:params}}