Ruby--使用自定义的分隔符将数组中的条目拆分为单独的条目

jq6vz3qz  于 11个月前  发布在  Ruby
关注(0)|答案(2)|浏览(93)

我有一个包含多个值的数组,我希望将其中一些拆分为单独的条目。

array = [ 'foo', 'frob & baz', 'bar' ]
# I want to split these with ' & ' as a delimiter, to get this output:
result = [ 'foo', 'frob', 'baz', 'bar' ]

字符串
我宁愿避免显式枚举整个数组。

w8rqjzmb

w8rqjzmb1#

不遍历数组是不可能解决这个问题的。你必须检查数组中的每个元素,以检查它是否包含数组。无论你如何切片和切割,“检查每个元素”只是“遍历数组”的另一种说法。
我的方法是对数组的所有元素进行map,然后通过split

array.map { _1.split(' & ') }
#=> [['foo'], ['frob', 'baz'], ['bar']]

字符串
正如你所看到的,这几乎给了我们想要的结果,只是多了一层嵌套,我们可以用flatten删除:

array.map { _1.split(' & ') }.flatten(1)
#=> ['foo', 'frob', 'baz', 'bar']


然而,mapflatten的组合是浪费的,并且不是很有意图。有一个标准方法存在于几乎每种语言的几乎每一个集合库中,它正好满足我们的需要:flat_map

array.flat_map { _1.split(' & ') }
#=> ['foo', 'frob', 'baz', 'bar']


如果我们使用的是Rubocop,它会警告我们这一点(使用可选的 rubocop-performance 扩展),甚至会自动更正!

lbsnaicq

lbsnaicq2#

您可以将数组的成员拆分为该数组中的单独条目,方法是首先使用拆分成员所依据的对象连接数组,然后使用该对象拆分数组。

array = [ 'foo', 'frob & baz', 'bar' ]
result = array.join(' & ').split(' & ')

字符串

相关问题