我正在比较大型数组以找到缺少的元素。但是一个数组都将被大写,而另一个数组则不是。所以我想格式化一个数组,但我遇到了问题。这是我想要格式化的数组的一个例子。
array = [ 023, "Bac001", "abc123"]
然后我尝试把所有东西都搞好了
array.map!(&:upcase)
但是为023
获取未定义的方法'upcase'有没有办法解决这个问题?
答案 0 :(得分:5)
def upcase_elements(ary)
ary.map { |e| e.respond_to?(:upcase) ? e.upcase : e }
end
upcase_elements([23, "BAC001", "ABC123"])
#=> [23, "BAC001", "ABC123"]
检查接收器是否响应方法比检查其类型更灵活:
upcase_elements([:foo, "bar"])
#=> [:FOO, "BAR"]
答案 1 :(得分:4)
array.map! { |s| s.kind_of?(String) ? s.upcase : s }
这不会尝试大写数组的任何非字符串元素。所以它适用于像:
这样的数组array = [23, 1.27, "Bac001", "abc123", {:foo => 3}]
产量:
[23, 1.27, "BAC001", "ABC123", {:foo => 3}]