朱莉娅相当于Ruby的每个人

时间:2015-12-29 23:42:51

标签: arrays iterator julia

在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

是否有比这个自定义函数更好或更惯用的方法?

2 个答案:

答案 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])