根据其中的条纹将Ruby数组块化
发布时间:2020-12-16 19:27:35 所属栏目:百科 来源:网络整理
导读:简介:我发现,这里的基本问题是,您是否可以将代码块传递给 Ruby数组,这实际上会将该数组的内容减少到另一个数组,而不是单个值(注入的方式).最简洁的答案是不”. 我接受了这个说明的答案.感谢Squeegy提供了一个很好的循环策略来从阵列中获取条纹. 挑战:减少
简介:我发现,这里的基本问题是,您是否可以将代码块传递给
Ruby数组,这实际上会将该数组的内容减少到另一个数组,而不是单个值(注入的方式).最简洁的答案是不”.
我接受了这个说明的答案.感谢Squeegy提供了一个很好的循环策略来从阵列中获取条纹. 挑战:减少数组元素而不显式循环. 示例脚本: 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 Streaks Sum: 0 Original Array: -10,-9,3,10 Streaks: -10,10 Streaks Sum: 0 请注意以下几点: >条纹阵列具有交替的正值和负值. 希望很清楚! 编辑:我确实意识到这样的结构如拒绝!实际上是在后台循环遍历数组.我不排除循环,因为我是一个卑鄙的人.只是想了解这门语言.如果需要显式迭代,那很好. 解决方法
从Ruby 1.9开始,有一种更简单的方法可以解决这个问题:
original_array.chunk{|x| x <=> 0 }.map{|a,b| a * b.size } Enumerable.chunk将通过块的输出将数组的所有连续元素组合在一起: >> original_array.chunk{|x| x <=> 0 } => [[1,[3]],[-1,[-4,-6]],[1,[1]],[-10,-5]],[7]],[-8]],[9]],[-3,-7]],[8,5]],[-2]],[6]],-9]]] 这几乎就是OP所要求的,除了需要计算得到的组以获得最终的条纹数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |