摘要: 这里的基本问题是,我已经发现,是否可以将代码块传递给一个Ruby数组,它实际上会将该数组的内容减少到另一个数组,而不是单个值( inject 的方式)。简短的答案是“否”。
输入: 所有从-10到10的整数(除0外)随机排序。
期望输出: 代表正数或负数连续出现的数组。例如,-3表示三个连续的负数。2表示两个连续的正数。
请注意以下几点:
编辑:我确实意识到像reject!这样的构造实际上在后台循环遍历数组。我不排除循环遍历是因为我是一个刻薄的人。只是想了解这种语言。如果需要显式迭代,那没问题。
我接受了这个答案。感谢Squeegy提供了一个很好的循环策略来从数组中获取连续的元素。
挑战: 在不显式地循环遍历数组的情况下减少数组的元素。输入: 所有从-10到10的整数(除0外)随机排序。
期望输出: 代表正数或负数连续出现的数组。例如,-3表示三个连续的负数。2表示两个连续的正数。
示例脚本:
original_array = (-10..10).to_a.sort{rand(3)-1}
original_array.reject!{|i| i == 0} # remove zero
streaks = (-1..1).to_a # this is a placeholder.
# The streaks array will contain the output.
# Your code goes here, hopefully without looping through the array
puts "Original Array:"
puts original_array.join(",")
puts "Streaks:"
puts streaks.join(",")
puts "Streaks Sum:"
puts streaks.inject{|sum,n| sum + n}
样例输出:
Original Array:
3,-4,-6,1,-10,-5,7,-8,9,-3,-7,8,10,4,2,5,-2,6,-1,-9
Streaks:
1,-2,1,-2,1,-1,1,-2,5,-1,1,-2
Streaks Sum:
0
Original Array:
-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10
Streaks:
-10,10
Streaks Sum:
0
请注意以下几点:
- streaks数组具有交替的正负值。
- streaks数组元素之和始终为0(原始数组之和也是如此)。
- streak数组绝对值之和始终为20。
编辑:我确实意识到像reject!这样的构造实际上在后台循环遍历数组。我不排除循环遍历是因为我是一个刻薄的人。只是想了解这种语言。如果需要显式迭代,那没问题。
Array
,添加一个执行此操作的方法。Ruby中没有内置的方法可以完成所有这些操作。 - Alex Wayne