1

私はいくつかの配列を持っています

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

この配列を別の配列に変換する必要があります

>> b = ("a".."c").to_a + (0..2).to_a
=> ["a", "b", "c", 0, 1, 2]

どうすればいいですか?

4

3 に答える 3

3
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]
于 2012-11-01T21:22:37.750 に答える
2

これはどうですか?

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

b = a.map { |e| Range.new( *(e).split('..') ).to_a }.flatten

使用されていないflat_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

ここで実際の動作を確認してください

于 2012-11-01T22:12:20.293 に答える
2
a = ["a..c", "0..2"]
b = a.flat_map{|str| Range.new(*str.split('..')).to_a} # => ["a", "b", "c", "0", "1", "2"]
p b.map!{|v| Integer(v) rescue v} # => ["a", "b", "c", 0, 1, 2]
于 2012-11-01T21:36:11.153 に答える