摘要:这里的基本问题是,我发现,您是否可以将代码块传递给Ruby数组,从而将该数组的内容实际上减少到另一个数组阵列,而不是一个单一的值(方式注入一样)。最简洁的答案是不”。根据其中的条纹大块红宝石数组
我接受,说这个问题的答案。感谢Squeegy提供了一个很好的循环策略,以便从数组中获得条纹。
挑战:为了减少数组元素的显式循环。
的输入:所有从-10至10的整数(0除外)随机排序。
所需的输出:表示正数或负数的条纹阵列。例如,-3代表三个连续的负数。 A 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
注意几件事情:
- 的条纹阵列具有交替的正和负值。
- 元素条纹阵列的总和始终为0(这是原始的和)。
- 连胜阵列的绝对值之和始终是20
希望是十分明显!
编辑:我也知道这样的构造为拒绝!实际上是在后台循环访问数组。我不排除循环,因为我是一个卑鄙的人。只是想了解这门语言。如果明确的迭代是必要的,那很好。
为什么不遍历数组?您如何期望处理数组的内容而不循环。即使你使用一种方法来做到这一点,它仍然会在内部遍历数组。 – 2009-02-24 17:21:19
你知道你在你的代码示例中调用的每个方法实际上是循环遍历数组... – kgrad 2009-02-24 17:22:50
是的,没有办法在没有循环的情况下减少数组......没有办法访问内容。 – cdmckay 2009-02-24 17:25:16