gpt4 book ai didi

arrays - 迭代数组中的元素,除了前两个,还使用 "each_slice"

转载 作者:数据小太阳 更新时间:2023-10-29 08:35:53 24 4
gpt4 key购买 nike

好吧,我有一个这样的数组:

array = ["month", "value", "january", "30%", "february", "40%"] # etc etc ...

我正在成对打印值,我的意思是:

array.each_slice(2) do |m, v|
puts "#{m}, #{v}"
end

Outputs:
month, value
january, 30%
february, 40%

很好,但我不希望输出:"month, value"(前两个)

我尝试这样做:(找到 here )

class Array
def each_after(n)
each_with_index do |elem, i|
yield elem if i >= n # Warning : it doesn't work without a block
end
end
end

array.each_slice(2).each_after(2) do |m, v|
puts "#{m}, #{v}"
end

并输出这个错误:

<main>: undefined method each_after for ...

我认为问题出在 "each_after" 方法上,该方法只是为了在没有 "each_slice" 的情况下使用它。

我的问题::

如何修改 "each_after" 方法以使用 "each_slice" 方法?

最佳答案

你的代码

each_slice返回一个 Enumerable,但是您为 Array 定义了您的方法。只需为 Enumerable 定义它:

module Enumerable
def each_after(n)
each_with_index do |elem, i|
yield elem if i >= n
end
end
end

然后你可以使用

array.each_slice(2).each_after(1) do |m, v|
puts "#{m}, #{v}"
end

请注意,您需要删除 1 个元素(2 元素数组)。

在不改变你的方法的情况下,你也可以在你的 Array 方法之前使用 to_a :

array.each_slice(2).to_a.each_after(1) do |m, v|
puts "#{m}, #{v}"
end

备选

只需使用 drop之前each_slice :

["month", "value", "january", "30%", "february", "40%"].drop(2).each_slice(2).to_a
#=> [["january", "30%"], ["february", "40%"]]

关于arrays - 迭代数组中的元素,除了前两个,还使用 "each_slice",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41453383/

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