我如何迭代ruby数组并始终获得两个值,当前和下一个,如:
[1,2,3,4,5,6].pairwise do |a,b|
# a=1, b=2 in first iteration
# a=2, b=3 in second iteration
# a=3, b=4 in third iteration
# ...
# a=5, b=6 in last iteration
end
Run Code Online (Sandbox Code Playgroud)
我的用例:我想测试数组是否已排序,并且通过使用这样的迭代器,我总能比较两个值.
我不是each_slice在这个问题中寻找:将ruby数组转换为连续对的数组
我如何在迭代数组时从数组中获取当前元素的下一个和之前的数据.
array.each do |a|
# I want to fetch next and before current element.
end
Run Code Online (Sandbox Code Playgroud) 鉴于这个Ruby数组:
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
像这样迭代它的最简单方法是什么?
[[1,2], [2,3], [3,4], [4,5]]
Run Code Online (Sandbox Code Playgroud)
或这个?
[[1,2,3], [2,3,4], [3,4,5]]
Run Code Online (Sandbox Code Playgroud) 假设你有这个数组:
arr = w|one two three|
Run Code Online (Sandbox Code Playgroud)
如何通过将两个连续元素作为块参数进行迭代,如下所示:
1st cycle: |nil, 'one'|
2nd cycle: |'one', 'two'|
3rd cycle: |'two', 'three'|
Run Code Online (Sandbox Code Playgroud)
Sofar我只来这里:
arr.each_index { |i| [i - 1 < 0 ? nil: arr[i - 1], arr[i]] }
Run Code Online (Sandbox Code Playgroud)
更好的解决方案?有类似的东西each(n)吗?
我有一个像这样的数组:
[1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
我希望得到像这样的二重奏中的物品:
请使用Ruby建议一种优雅的方法来实现这一点.
鉴于我有数组[1,2,3,4,5,6,7,8,9,10],一次抓取2个元素的最短路径是什么,同时确保每个切片之间存在重叠.例如:
预期结果
[1,2]
[2,3]
[3,4]
[4,5]
[5,6]
[6,7]
[7,8]
[8,9]
[9,10]
[10,nil]
Run Code Online (Sandbox Code Playgroud) 我是ruby的新手,我一直在阅读很多教程.昨天我SWEAR我读each了一个在数组上枚举的语句(或类似的东西)的例子,然后将数组的子集传递给了块.这是一个例子,但语法错误(或者我使用了错误的方法)所以这实际上不会运行.
arry = ["a", "b", "c", "d", "e"]
arry.each(3) {|a, b, c| puts a+b+c}
Run Code Online (Sandbox Code Playgroud)
如果我使用正确的命令,这将打印:abc bcd cde; 它需要从索引开始的数组的前三个成员,并且当没有足够长的字符串来提供所有三个参数时,枚举结束.我不记得怎么做了,我似乎无法谷歌正确找到它.你们中的任何人都知道吗?
好吧,我还没有找到一个干净的解决方案来轻松地在Ruby中编写这段代码:
# Java style version:
array.each do |i, el|
if i < array.length - 1
process(array[i], array[i+1])
end
end
# Would be nice if I could do something like this:
array.each do |i, el, next|
process(el, next)
end
Run Code Online (Sandbox Code Playgroud) 如何切片数组值?例如,我有:
a=[1,2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)
我需要:
[[1, 2], [2, 3], [3, 4], [4, 5], ...]
Run Code Online (Sandbox Code Playgroud)