私は配列を持ってい[1, 2, "3", "4", "1a", "abc", "a"]
ます
- 純粋な整数 (
1
,2
), - 文字列形式の整数 (
"1"
,"2"
), - 文字列 (
"a"
、"b"
)、および - 混合文字列番号 (
"1a"
,"2s"
)。
これから、整数 (フォーマットされた文字列を含む) 1
、2
、"3"
、のみを取得する必要があり"4"
ます。
最初に試したのはto_i
:
arr = [1, 2, "3", "4", "1a", "abc", "a"]
arr.map {|x| x.to_i}
# => [1, 2, 3, 4, 1, 0, 0]
しかし、これは私が期待していない に変換"1a"
されます。1
それから私は試しましたInteger(item)
:
arr.map {|x| Integer(x) } # and it turned out to be
# => ArgumentError: invalid value for Integer(): "1a"
今、私はここで直接変換オプションを使い果たしました. 最後に、値to_i
とを変換するこの方法を行うことにしましたto_s
。"1" == "1".to_i.to_s
整数もそうですが、そうでは"1a" == "1a".to_i.to_s
ありません。"a" == "a".to_i.to_s
arr = arr.map do |x|
if (x == x.to_i.to_s)
x.to_i
else
x
end
end
と
ids, names= arr.partition { |item| item.kind_of? Fixnum }
これで、整数と文字列の配列を取得できました。これを行う簡単な方法はありますか?