Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 方法在不改变原始数据的情况下对数组元素进行排序?_Ruby - Fatal编程技术网

Ruby 方法在不改变原始数据的情况下对数组元素进行排序?

Ruby 方法在不改变原始数据的情况下对数组元素进行排序?,ruby,Ruby,因此,我试图定义一种方法my_array_sorting_方法,它将arraysource作为输入,并将数组的元素(整数和字符串)按字母顺序排序并显示,所有这些都不会改变原始数组结构。这就是我到目前为止所做的: def my_array_sorting_method(source) source.sort_by { |a,b| a <=> b } end 我假设通过使用非破坏性方法,它可以实现我想要的功能,但在运行代码时仍然会收到错误消息: '我的数组排序方法!转换按字母顺序

因此,我试图定义一种方法my_array_sorting_方法,它将arraysource作为输入,并将数组的元素(整数和字符串)按字母顺序排序并显示,所有这些都不会改变原始数组结构。这就是我到目前为止所做的:

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"