gpt4 book ai didi

iterator - 如何在 Julia 1.0 中创建自定义迭代器?

转载 作者:行者123 更新时间:2023-12-04 15:53:34 25 4
gpt4 key购买 nike

我在 Julia 1.0 中有这个结构:

mutable struct Metadata
id::Int64
res_id::Int64
end

这样我就可以创建一个数组,其中 id 总是递增 1,但 res_id 只是有时递增,如下所示:

data = [
Metadata(1, 1),
Metadata(2, 1),
Metadata(3, 1),
Metadata(4, 2),
Metadata(5, 2),
Metadata(6, 2),
...]

我想做的是能够遍历这个数组,但是根据 res_id 获取 block (所有具有 res_id 的数据 1,然后 2,等等).期望的行为是这样的:

for res in iter_res(data)
println(res)
end

julia>
[Metadata(1, 1), Metadata(2, 1), Metadata(3, 1)]
[Metadata(4, 2), Metadata(5, 2), Metadata(6, 2)]

在 Julia 1.0 中,考虑到我通常还需要遍历数组以逐个元素地获取元素,我该如何做到这一点?

最佳答案

在 Julia 1+ 中,这应该通过实现 Base.iterate(::YourType) 来获取起始迭代和 Base.iterate(::YourType, state) 用于基于某些 state 的其他迭代。这些方法在完成时应该返回 nothing,否则返回 (result, state) 元组。

用 YourType 迭代

for i in x
# stuff
end

然后是写作的简写

it = iterate(x)
while it !== nothing
i, state = it
# stuff
it = iterate(x, state)
end

参见 manual了解详情。

关于iterator - 如何在 Julia 1.0 中创建自定义迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52852411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com