给出
30.02 -88.87 10.58 -99.22 107.33
不使用sort
方法进行排序。我花了几个小时没有成功。
def simple_sort(list) # I have to start with this method
list = list.split(' ') # I understand i need to .split to get arrays
因为他们会浮动我需要一种方法来使用to_f
方法.each(&:to_f)
浮动它我之前看过这个但是我不确定我是否理解" { {1}}&#34 ;.我以为冒号做了物体符号,所以有人请向我解释:
吗?
(&:to_f)
这是变得棘手的部分!我从哪里开始?
我想浏览数组中的每个项目,找到最小的数字并将其添加到 sorted_list = [] #thought of creating an empty array to store the new list
sorted_list
而不是使用< =>,这会使这段代码有效吗?
答案 0 :(得分:3)
打开IRB并尝试:
>> foo = '30.02 -88.87 10.58 -99.22 107.33'
"30.02 -88.87 10.58 -99.22 107.33"
>> foo.split
[
[0] "30.02",
[1] "-88.87",
[2] "10.58",
[3] "-99.22",
[4] "107.33"
]
所以split
打破了空格上的字符串,到目前为止一直很好。
>> foo.split.each(&:to_f)
[
[0] "30.02",
[1] "-88.87",
[2] "10.58",
[3] "-99.22",
[4] "107.33"
]
嗯......价值没有改变,所以each
可能没有按照你的想法做。请改为map
:
>> foo.split.map(&:to_f)
[
[0] 30.02,
[1] -88.87,
[2] 10.58,
[3] -99.22,
[4] 107.33
]
将值转换为浮点值后,就可以轻松对它们进行排序。
注意:您可以使用<=>
运算符(AKA&#34;太空飞船&#34;)来告诉您一个是小于,等于还是大于另一个,这使得它很容易知道什么时候应该交换它们。例如:
0 <=> 1 # => -1
1 <=> 1 # => 0
2 <=> 1 # => 1
您应该阅读Comparable模块的文档,通过定义<=>(other)
方法,可以非常轻松地在类中添加其他功能。
map
允许我们修改/转换数组的元素,而each
只能迭代它们。您可以使用each
来混淆元素,但由于map!
可以让您更轻松地转换内容,因此通常不会执行此操作。
关于&:to_f
。这是一段时间以来对Ruby的符号的破解,它被添加到Rails中。事实证明它非常有用,它被引入Ruby本身。它被称为&#34;符号来触发&#34;并在&#34; Ruby ampersand colon shortcut&#34;。