私は配列を持ってい[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 }
これで、整数と文字列の配列を取得できました。これを行う簡単な方法はありますか?