如何在ruby中将范围为的数组转换为单独的数组

如何在ruby中将范围为的数组转换为单独的数组,ruby,arrays,range,Ruby,Arrays,Range,我有一些数组 >> a = ["a..c", "0..2"] => ["a..c", "0..2"] 我需要将此数组转换为另一个数组 >> b = ("a".."c").to_a + (0..2).to_a => ["a", "b", "c", 0, 1, 2] 我怎么能做到 这个怎么样 a.flat_map do |string_range| from, to = string_range.split("..", 2) (from =~ /^\

我有一些数组

>> a = ["a..c", "0..2"]
=> ["a..c", "0..2"]
我需要将此数组转换为另一个数组

>> b = ("a".."c").to_a + (0..2).to_a
=> ["a", "b", "c", 0, 1, 2]
我怎么能做到

这个怎么样

a.flat_map do |string_range| 
  from, to = string_range.split("..", 2)
  (from =~ /^\d+$/ ? (from.to_i..to.to_i) : (from..to)).to_a 
end 
#=> => ["a", "b", "c", 0, 1, 2]
a = ["a..c", "0..2"]

b = a.map { |e| Range.new( *(e).split('..') ).to_a }.flatten
没有使用
flat\u map
,因此它在所有版本上的工作方式相同

正如@steenslag正确提到的,此版本不转换为整数

以下是一个版本:

b = a.map do |e| 
  Range.new( *(e).split('..').map{ |c| c =~ /\A\d+\Z/ ? c.to_i : c } ).to_a 
end.flatten
在行动中看到它这个怎么样

a = ["a..c", "0..2"]

b = a.map { |e| Range.new( *(e).split('..') ).to_a }.flatten
没有使用
flat\u map
,因此它在所有版本上的工作方式相同

正如@steenslag正确提到的,此版本不转换为整数

以下是一个版本:

b = a.map do |e| 
  Range.new( *(e).split('..').map{ |c| c =~ /\A\d+\Z/ ? c.to_i : c } ).to_a 
end.flatten

在Thanx中看到它,我有Ruby的1.8.7版本,这个例子已经成功了!Thanx,我有Ruby的1.8.7版本,这个例子已经成功了!