假设我有:

a = [['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h'], ['i', 'j'], ['k']]

然后,我想加入PARAY,但保留余数元素不变,如下所示:

[["a_b", "c_d", "e"], ["f_g", "h"], ["i_j"], ["k"]]

我拥有的(产生结果的)最接近的是:

r = a.map { |sl| 
  tmp = []
  sl.each_slice(2) { |a, b| tmp << (b.nil? ? a : "#{a}_#{b}") }
  tmp
}

或者:

r = a.map { |sl| 
  tmp = []
  sl.each_slice(2) { |a, b| tmp << (b.nil? ? a : [a,b].join("_")) }
  tmp
}

有没有一种更干净的方法来做这件事?

推荐答案

有没有一种更干净的方法来做这件事?

  • 如果没有给定块,则each_slice返回Enumerator.
  • Enumerator对应于map
  • map将向块产生完整的"切片"子数组
  • each_slice不能保证n元素array.如果切片不平坦,那么它只会产生剩下的部分.

了解所有这些信息后,您的实施可以简化为:

a.map { |s1| s1.each_slice(2).map { |e| e.join("_") } }

Ruby相关问答推荐

带有(*)签名的Ruby方法

数组上的Ruby#unionreact 非常奇怪

清理 jruby 中输入数据的编码错误

是否可以在 Ruby 中使用正则表达式匹配字符串\b(退格字符)?

Ruby 中无法解释的撬动行为

Ruby open-uri 重定向被禁止

为 Ruby 模块中的每个方法调用执行代码

如何在 Ruby 中初始化 Hash 中的数组

Ruby语法

使用 Ruby MiniTest 之前/之后的套件

RSpec: stubbing Kernel::sleep?

在 ruby​​ 中将每个数组元素添加到文件的行中

在 Ruby 中,有没有办法使用 hash.each_with_index do |[k,v], i| 之类的东西?

如何删除Ruby中数组中满足条件的所有元素?

在现有 Jekyll 安装中切换主题

Ruby:更新哈希值的最简单方法是什么?

发现 Ruby 对象成员?

计算文件中的行数而不将整个文件读入内存?

为什么 Ruby 文档中的方法前面有一个井号?

如何使用 Ruby 的 self 关键字