“排序”和“排序”有啥区别!红宝石中的方法? [复制]
Posted
技术标签:
【中文标题】“排序”和“排序”有啥区别!红宝石中的方法? [复制]【英文标题】:What is the difference between the "sort" and "sort!" method in ruby? [duplicate]“排序”和“排序”有什么区别!红宝石中的方法? [复制] 【发布时间】:2013-11-11 05:30:57 【问题描述】:来自 Ruby 的官方文档:
排序 → new_ary sort |a, b| block → new_ary 返回一个新数组 通过自我排序创建。
排序的比较将使用 运算符或使用 一个可选的代码块。
该块必须实现a和b之间的比较,并返回-1, 当 a 跟在 b 之后,当 a 和 b 相等时为 0,如果 b 跟在 a 之后,则 +1。
另请参见 Enumerable#sort_by。
a = [ "d", "a", "e", "c", "b" ]
a.sort #=> ["a", "b", "c", "d", "e"]
a.sort |x,y| y <=> x #=> ["e", "d", "c", "b", "a"]
排序! → ary 点击切换源排序! |a, b|块 → ary 排序 自我到位。
排序的比较将使用 运算符或使用 一个可选的代码块。
该块必须实现a和b之间的比较,并返回-1, 当 a 跟在 b 之后,当 a 和 b 相等时为 0,如果 b 跟在 a 之后,则 +1。
另请参见 Enumerable#sort_by。
a = [ "d", "a", "e", "c", "b" ]
a.sort! #=> ["a", "b", "c", "d", "e"]
a.sort! |x,y| y <=> x #=> ["e", "d", "c", "b", "a"]
结果好像一样,那有什么区别呢?
【问题讨论】:
sort
返回一个通过排序self创建的新数组 而sort!
对self进行排序,它写在你发布的文档中...
是的,尼尔,这可能是该问题的重复。我没有意识到这一点,因为我是 Ruby 的新手。对不起。假设我这次是无辜的:)
这是来自接近投票的自动消息。完全没有问题,大多数封闭式问题都是真诚地提出的。但是 SO 的正确结果是这个问题应该被关闭,除非它可能由于问题和答案的措辞引起了每个人的想象,然后获得了足够的选票,它成为问题的 新 最佳版本。
是的,我同意。感谢您对 SO 的贡献。
【参考方案1】:
sort
不会修改原始数组,而sort!
会
('!' 是 ruby 中的 bang 方法,它将替换现有值)
例如:
a = [4,3,2,5,1]
a.sort # => [1,2,3,4,5]
a is still [4,3,2,5,1]
在哪里
a = [4,3,2,5,1]
a.sort! # => [1,2,3,4,5]
a is now [1,2,3,4,5]
【讨论】:
【参考方案2】:在轨道上!用于应用更改并更新其调用对象的方法
a.sort 只会返回排序后的数组,但会返回 a.sort!将返回排序后的数组并将新的排序结果保存在变量中。
【讨论】:
【参考方案3】:'!' is the bang method in ruby, it will replace the existing value
ex: .sort is a normal sorting method in ruby
.sort! its a bang method in ruby its override the existing value.
【讨论】:
以上是关于“排序”和“排序”有啥区别!红宝石中的方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章