我想映射数组的元素,使得数组的所有元素 都是浮点数,除了第一个元素是 是一个字符串。基于位置映射数组的不同元素
任何人都知道我该怎么做?
试过,但不起作用:
arr = arr.map { |e| e.to_i if e != arr.first }
我想映射数组的元素,使得数组的所有元素 都是浮点数,除了第一个元素是 是一个字符串。基于位置映射数组的不同元素
任何人都知道我该怎么做?
试过,但不起作用:
arr = arr.map { |e| e.to_i if e != arr.first }
另一种解决方案是
[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 }
我认为你的意思是:[array.first] + ....这确实是最好的解决方案,不检查循环内部。 – tokland 2011-03-20 09:25:46
你可以用很短的三元表达式的位置:
a.map { |e| (e == a.first) ? e : e.to_f }
另一种选择(如果你不希望使用三元经营者)被要做到以下几点:
arr = arr.map { |e| (e == arr.first) && e || e.to_f}
这个替代方案是讨论here。此方法的一个限制是数组中的第一个元素不能为零(或者其他值可以在布尔评估中评估为false),因为如果是这样,它将计算到||
表达式并返回e.to_f而不仅仅是即
Ruby 1.9 only?
arr = arr.map.with_index { |e, i| i.zero? ? e.to_s : e.to_f }
您可以询问对象本身是否是数字。
"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
的意思是“我非常像一个整数 - 将我完全置信地转换成一个整数!”
啊,这是整洁:) – Flethuseo 2011-03-21 19:19:53
为什么不编辑你的问题,并提供一些样本数据,以及所需输出的例子呢? – 2011-03-20 03:01:41