Viết tắt for-loop để lặp qua một mảng có cả giá trị và chỉ mục


9

Có cách nào thuận tiện / tốc ký để lặp qua vòng lặp for trên một mảng, nhận cả giá trị và chỉ mục không?

Tùy chọn cơ bản:

i = 1
for file in ["foo.csv", "bar.csv"]
    ...
   i += 1
end
files = ["foo.csv", "bar.csv"]
for i in 1:length(files)
   files[i]
end

Câu trả lời:


13

Chỉnh sửa: Như Matt B chỉ ra, pairsđơn giản và an toàn cho chỉ mục (nếu sử dụng một OffsetArraytuple, từ điển, v.v.):

for (i, file) in pairs(["foo.csv", "bar.csv"])
    ...
end

Một lựa chọn là enumerate:

for (i, file) in enumerate(["foo.csv", "bar.csv"])
    ...
end

nhưng lưu ý rằng liệt kê không nhất thiết phải cung cấp các chỉ số hợp lệ, vì nó hiệu quả zip(x, countfrom(1))và sẽ phá vỡ cho OffsetArrays.

Một cái khác là an toàn chỉ mục, nhưng yêu cầu filesphải là một biến:

files = ["foo.csv", "bar.csv"]
for (i, file) in zip(eachindex(files), files)
    ...
end

6
thậm chí còn dễ dàng hơn : pairs!
Matt B.

nó cũng hoạt động cho những thứ như từ điển và bộ tuples và như vậy.
Matt B.
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.