Chức năng như liệt kê để lấy chỉ số và giá trị cho mảng bù?


8

Nếu tôi có một mảng như thế này:

using OffsetArrays

a = OffsetArray(collect(1:5),(11:15))

Tôi có thể lặp qua mảng với:

for (i,x) in enumerate(a)
    println((i,x))
end

và lấy:

(1, 1)
(2, 2)
(3, 3)
(4, 4)
(5, 5)

Nhưng tôi muốn điều này:

(11, 1)
(12, 2)
(13, 3)
(14, 4)
(15, 5)

Có cách nào để lấy chỉ số thực sự khi tôi đang sử dụng một mảng bù không?

Câu trả lời:


9

Hàm pairstôn trọng hành vi lập chỉ mục:

julia> using OffsetArrays

julia> a = OffsetArray(collect(1:5),(11:15))

julia> for (i,x) in pairs(a)
         println((i,x))
       end

(11, 1)
(12, 2)
(13, 3)
(14, 4)
(15, 5)

từ các tài liệu:

Base.pairs- Chức năng .

pairs(collection)

Trả về một trình vòng lặp qua key => valuecác cặp cho bất kỳ bộ sưu tập nào ánh xạ một tập hợp các khóa thành một tập hợp các giá trị. Điều này bao gồm các mảng, trong đó các khóa là các chỉ số mảng.

pairs(IndexLinear(), A)
pairs(IndexCartesian(), A)
pairs(IndexStyle(A), A)

Một trình vòng lặp truy cập từng phần tử của mảng A, trả về i => x, trong đó ilà chỉ mục cho phần tử và x = A[i]. Đồng nhất với pairs(A), ngoại trừ kiểu dáng của chỉ mục có thể được chọn. Cũng tương tự enumerate(A), ngoại trừ isẽ là một chỉ mục hợp lệ cho A, trong khi enumerateluôn được tính từ 1 bất kể chỉ số của A.

Chỉ định IndexLinear()đảm bảo rằng isẽ là một số nguyên; chỉ định IndexCartesian()đảm bảo rằng isẽ là một CartesianIndex; chỉ định IndexStyle(A)chọn bất kỳ kiểu nào đã được xác định là kiểu lập chỉ mục gốc cho mảng A.

Đột biến giới hạn của mảng bên dưới sẽ làm mất hiệu lực của trình vòng lặp này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.