我想映射数组的元素,以便所有元素 数组是浮点数,除了第一个元素 是一个字符串。
任何人都知道我该怎么做?
试过这个但不起作用:
arr = arr.map { |e| e.to_i if e != arr.first }
答案 0 :(得分:2)
另一种解决方案是
[array.first] + array.drop(1).map &:to_f
这清楚地表明您希望第一个元素与其余元素分开,并且您希望其余元素的类型为Float
。其他选择包括
array.map { |element, index| index == 0 ? element : element.to_f }
array.map { |element| element == array.first ? element : element.to_f }
答案 1 :(得分:1)
您可以在此处使用简短的三元表达式:
a.map { |e| ( e == a.first ) ? e : e.to_f }
答案 2 :(得分:1)
另一个选项(如果您不想使用三元运算符)是执行以下操作:
arr = arr.map { |e| (e == arr.first) && e || e.to_f}
讨论了这个替代方案here。这种方法的一个限制是数组中的第一个元素不能是nil(或者在布尔评估中会评估为false的其他值),因为如果是这样,它将计算为||
表达式并返回e。 to_f而不仅仅是e。
答案 3 :(得分:1)
仅限Ruby 1.9?
arr = arr.map.with_index { |e, i| i.zero? ? e.to_s : e.to_f }
答案 4 :(得分:1)
您可以询问对象本身是否为数字。
"column heading".respond_to?(:to_int) # => false
3.1415926.respond_to?(:to_int) # => true
new_arr = arr.map do |string_or_float|
if string_or_float.respond_to?(:to_int)
string_or_float.to_int # Change from a float into an integer
else
string_or_float # Leave the string as-is
end
end
respond_to?(:to_int)
表示“我可以致电to_int
吗?”
to_int
是一种方法,只有易于转换为整数的对象才有。与to_i
不同,它是“我不是很像整数,但你可以尝试将我转换为整数”,to_int
表示“我非常喜欢整数 - 转换我完全自信地变成一个整数!“