在Ruby中,有一个方法each_cons
,可以用来迭代给定大小的连续组。例如,
irb(main):001:0> [4, 7, 6, 1, 0, 3].each_cons(2) { |x| p x }
[4, 7]
[7, 6]
[6, 1]
[1, 0]
[0, 3]
=> nil
这里我们从输入数组中选择并打印每对连续的元素。
朱莉娅怎么会这样呢?
可以定义一个这样的函数:
function eachcons(x::Array{Any,1}, n::Int)
L = length(x)
(L ≤ 1 || n > L) && return nothing # Matches Ruby's behavior
return [x[i-n+1:i] for i = n:L]
end
是否有比这个自定义函数更好或更惯用的方法?
答案 0 :(得分:4)
对于预先制定的解决方案,Iterators包中始终存在partition
功能。该函数可以从数组中返回n个连续元素的元组:
julia> using Iterators
INFO: Precompiling module Iterators...
julia> A = [4, 7, 6, 1, 0, 3]
julia> for pair in Iterators.partition(A, 2, 1)
println(pair)
end
(4,7)
(7,6)
(6,1)
(1,0)
(0,3)
答案 1 :(得分:0)
Iterators.partition(...)
中的第三个参数消失了,这是一种耻辱。也许 Julia 未来版本中的新版本可能是:
Iterators.partition(enum, 3, advance = 1)
无论如何,现在的解决方法是:
julia> zip(enum, enum[2:end], enum[3:end])