ruby 在每个 block 中添加范围元素

标签 ruby range block

如何将每个 block 中的范围元素添加在一起。例如:

a = [[1..10, 13..20, 21..24], [34..39, 42..45], [50..55]]

结果:

a = [[9+7+3],[5+3],[5]]
a = [20, 8, 5]

最佳答案

您可以通过相应的firstlast 方法访问范围的第一个和最后一个元素。 inject(:+) 对属于同一组的所有范围的部分距离求和。

a.map { |ran­ges| range­s.map { |rang­e| range­.last - range­.first }.inj­ect(:+) }
=> [19, 8, 5]

或者,甚至更短,正如 tokland 使用 Ruby 2.0 所建议的那样:

a.map { |ran­ges| range­s.map(&:size).reduce(0, :+) }

关于ruby 在每个 block 中添加范围元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23607512/

相关文章:

C# 来自 Ruby Wilson 得分

ruby-on-rails - 没有路由匹配 [GET] "/static_pages/home.html.erb"

c++ - 是否有特征或任何约定来检查范围或 `view_facade` 是否拥有事物? (例如 getlines)

Excel VBA : Range gives Argument Not Optional error message

elasticsearch - Elasticsearch范围唯一聚合文档

html - 调整 blockquote 使其适合短引号和长引号

ruby-on-rails - 回形针多态关联和保存

ruby-on-rails - 对 Rails 序列化器数据进行排序

ios - 这个 block 队列中发生了什么?

ios - 如何将具有多个参数的 block 放入 NSOperationQueue?