2014-07-18 11 views
10

Giống như trong python tôi có thể sử dụng slice. Giống như sauLiệu lua có một cái gì đó giống như slice python của

b=[1,2,3,4,5] 
a=b[0:3] 

Tôi có thể thực hiện loại thao tác đó trong Lua mà không cần lặp lại hay không. Hoặc Loop là cách hiệu quả nhất để làm điều đó

+2

https://github.com/justincormack/slice –

Trả lời

8

Không có đường cú pháp để thực hiện điều này, vì vậy đặt cược tốt nhất của bạn sẽ được làm việc đó thông qua một chức năng:

function table.slice(tbl, first, last, step) 
    local sliced = {} 

    for i = first or 1, last or #tbl, step or 1 do 
    sliced[#sliced+1] = tbl[i] 
    end 

    return sliced 
end 

local a = {1, 2, 3, 4} 
local b = table.slice(a, 2, 3) 
print(a[1], a[2], a[3], a[4]) 
print(b[1], b[2], b[3], b[4]) 

Hãy ghi nhớ rằng tôi đã không kiểm tra chức năng này, nhưng ít nhiều nó trông như thế nào mà không kiểm tra đầu vào.

Chỉnh sửa: I ran it at ideone.

2

gói xlua có chức năng table.splice. (Luarocks cài đặt xlua)

yourTable = {1,2,3,4} 
startIndex = 1; length = 3 
removed_items, remainder_items = table.splice(yourTable, startIndex, length) 
print(removed_items) -- 4 
print(remainder_items) -- 1,2,3 

see: https://github.com/torch/xlua/blob/master/init.lua#L640

2

Sử dụng table.unpack trong Lua 5.3.4:

for key, value in pairs({table.unpack({1, 2, 3, 4, 5}, 2, 4)}) do                                      
    print(key, value)                                               
end 

tạo

1 2 
2 3 
3 4 
Các vấn đề liên quan