所以,我试图定义一个方法#my_array_sorting_method
,它将数组(源)作为输入并获取数组的元素(整数和字符串)并按字母顺序排序并显示,所有这一切都没有改变原来的阵列结构。这就是我到目前为止所做的:
def my_array_sorting_method(source)
source.sort_by { |a,b| a <=> b }
end
我假设使用非破坏性的方法,它可以做我想要的,但我仍然在运行代码时收到错误消息:
&#39; my_array_sorting_method! convert会按字母顺序对所有元素进行排序,而不会更改更改的数据&#39;
如果有人可以帮助我,我将非常感激。我是一个Ruby新手,我真的被困在这里。
答案 0 :(得分:0)
如果您查找ruby文档,您可以找到一些不同的排序方法,供Enumerable
个对象(如Array
)使用,主要是sort
和{{1和他们的变化。
sort_by
和sort
都会返回新的已排序sort_by
而不修改原始文件。
<强> Enumerable#sort
强>
传入一个块,告诉它如何比较两个对象。
Array
<强> Enumerable#sort_by
强>
传入一个块,该块检索对象应该被排序的键(使用默认的比较器unsorted = 5.times.map { rand(100) }
new_sorted_array = unsorted.sort { |x, y| x <=> y }
new_sorted_array = unsorted.sort # this is equivalent because we're only using the default comparator, <=>
puts "still unsorted: #{unsorted.inspect}"
puts "sorted: #{new_sorted_array.inspect}"
,我认为)
<=>
请注意,此信息全部在线提供,并且我已将上述各部分与其相关的ruby文档相关联。我自己经常提到他们。
默认情况下,整数与整数和带字符串的字符串相当,使用默认比较器unsorted_wrapped_numbers = 5.times.map { [rand(100)] }
new_sorted_array = unsorted_wrapped_numbers.sort_by { |wrapped_number| wrapped_number.first }
puts "still unsorted: #{unsorted_arrays_of_single_numbers.inspect}"
puts "sorted: #{new_sorted_array.inspect}"
:
<=>
您需要定义如何将整数与字符串进行比较,但是:
94 <=> 2 # returns 1, meaning "greater than"
3 <=> 3 # returns 0, meaning "equal"
"goodbye" <=> "hello" # returns -1, meaning "less than", since "g" comes before "h", alphabetically
考虑将数字转换为字符串,例如:
5 <=> "word" # returns nil