Ruby 方法在不改变原始数据的情况下对数组元素进行排序?
因此,我试图定义一种方法my_array_sorting_方法,它将arraysource作为输入,并将数组的元素(整数和字符串)按字母顺序排序并显示,所有这些都不会改变原始数组结构。这就是我到目前为止所做的:Ruby 方法在不改变原始数据的情况下对数组元素进行排序?,ruby,Ruby,因此,我试图定义一种方法my_array_sorting_方法,它将arraysource作为输入,并将数组的元素(整数和字符串)按字母顺序排序并显示,所有这些都不会改变原始数组结构。这就是我到目前为止所做的: def my_array_sorting_method(source) source.sort_by { |a,b| a <=> b } end 我假设通过使用非破坏性方法,它可以实现我想要的功能,但在运行代码时仍然会收到错误消息: '我的数组排序方法!转换按字母顺序
def my_array_sorting_method(source)
source.sort_by { |a,b| a <=> b }
end
我假设通过使用非破坏性方法,它可以实现我想要的功能,但在运行代码时仍然会收到错误消息:
'我的数组排序方法!转换按字母顺序对所有元素进行排序,而不更改数据的名称
如果有人能在这里帮助我,我将不胜感激。我是一个红宝石新手,我真的被困在这里。
如果您查阅ruby文档,您会发现一些不同的排序方法,可用于可枚举对象,如Array,主要是sort和sort by及其变体
sort和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文档。我自己经常提到他们
按字母顺序比较
默认情况下,使用默认比较器,整数与整数和字符串具有可比性:
不过,您需要定义如何将整数与字符串进行比较:
5 <=> "word" # returns nil
考虑将数字转换为字符串,例如:
5.to_s <=> "word"
欢迎布伦顿!你确定你叫它“排序依据”而不是“排序依据”?感叹号或砰砰声表示该方法修改了它所调用的对象。如果您所做的只是一个b的简单比较,那么RubyConventionsortèby将比使用sortè慢。有关更多信息,请参阅。@theTinMan我不建议他担心性能问题。对他来说,更重要的是要知道他将错误的块传递到sort_by。意识到一种方式比另一种方式快,特别是在sort和sort_by之间存在差异的情况下,这一点非常重要。由于在编码上做了一个非常简单的改变,这两者在性能上可能会有显著的差异。非常感谢,这为我澄清了很多东西。这只是一个简单的方法,我没有用。下面是我提出的解决方案:def my|u array_sorting_methodsource.sort_by{a,b | a.to_s}end删除变量b。这是无关的,没有任何作用。另外,如果你觉得我的帖子有帮助,你介意接受它作为答案吗?
5 <=> "word" # returns nil
5.to_s <=> "word"