[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 }
现在我得到了整数和字符串的数组。有没有一种简单的方法可以做到这一点?