具有字符串和数字的upcase数组

时间:2013-09-16 15:26:50

标签: ruby arrays string-formatting

我正在比较大型数组以找到缺少的元素。但是一个数组都将被大写,而另一个数组则不是。所以我想格式化一个数组,但我遇到了问题。这是我想要格式化的数组的一个例子。

array = [ 023, "Bac001", "abc123"]

然后我尝试把所有东西都搞好了

array.map!(&:upcase)

但是为023

获取未定义的方法'upcase'

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:5)

我使用Object#respond_to?

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}]