首页 > 解决方案 > 是否有一个 Ruby 单线器来 join() 嵌套的 Ruby 数组,内部/外部数组有不同的 join() 字符串?

问题描述

为了:

a = [ ["John", "Doe"], ["Sue", "Smith"]]

所需的输出是:"John Doe, Sue Smith"

蛮力代码很简单:

a = [ ["John", "Doe"], ["Sue", "Smith"]]
name_array = []
a.each { |n| name_array << n.join(" ") } # first, inner join w/ space
s = name_array.join(", ") # then, outer join with comma

但是在 Ruby 中是否有更简洁的方法(单行?)来实现这一点?

标签: ruby

解决方案


映射和加入

您可以使用Array#mapArray#join来做到这一点。例如,在 Ruby 2.7.1 中:

array = [["John", "Doe"], ["Sue", "Smith"]]
array.map { _1.join ?\s }.join ", "
#=> "John Doe, Sue Smith"

如果你没有使用最近的 Ruby,或者发现更明确的语法更可取,你可以像这样做同样的事情:

array.map { |subarray| subarray.join " " }.join ", "
#=> "John Doe, Sue Smith"

当然还有其他方法可以做到这一点,但这个单行似乎适合您的示例和用例。


推荐阅读