首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby min和max是如何比较字符串的?

问Ruby min和max是如何比较字符串的?
EN

Stack Overflow用户
提问于 2016-05-24 04:00:08
回答 3查看 1.4K关注 0票数 0

我在使用迭代器。Ruby使用max和min进行了什么比较

如果我有这个数组:

代码语言:javascript
复制
word_array = ["hi", "bob", "how's", "it", "going"]

然后我跑起来:

代码语言:javascript
复制
puts word_array.max
puts word_array.min

我希望得到max的“to”或"how's“,因为它们都是五个字符的长度,或者”to“,因为它是数组中的最后一项。我希望min会返回"hi“或"it",因为它们在最短的字符串中是并列的。相反,我得到的回答是:

代码语言:javascript
复制
puts word_array.max -> it
puts word_array.min -> bob

Ruby是用什么来做出这个判断的?它为max选择了最短的字符串,为min选择了一个中间长度的字符串。

EN

回答 3

Stack Overflow用户

发布于 2016-05-24 05:29:39

实际上,你(有点)问错了问题。max和min是在Enumerable上定义的。他们对Strings一无所知。

他们使用<=>组合比较运算符(也称为“宇宙飞船”)。(注意:几乎所有比较两个对象的方法都会使用<=>操作符。这是Ruby语言中的一条通用规则,在使用别人编写的对象时可以依赖,在编写自己的对象时也应该遵守:如果要将对象相互比较,则应该实现<=>运算符。)

因此,您应该问的问题是,String#<=>与String相比如何?不幸的是,文档中的答案并不是很清楚。但是,它确实提到,如果两个字符串在这一点之前相等,则认为较短的字符串小于较长的字符串。因此,很明显,长度仅用作打破平局的标准,而不是作为主要标准(如您在问题中假设的那样)。

实际上,按字典顺序排序是最自然的事情。如果我给你一个单词列表,让你在没有给你任何标准的情况下对它们进行排序,你会按长度还是按字母顺序排序?(但是请注意,这意味着'20'小于'3'。)

票数 6
EN

Stack Overflow用户

发布于 2016-05-24 04:06:27

我相信它是在进行词法排序,就像字典排序一样。最大值将是字典中最远的一个。

票数 3
EN

Stack Overflow用户

发布于 2016-05-24 12:12:52

http://ruby-doc.org/core-2.1.0/Enumerable.html#method-i-max_by

代码语言:javascript
复制
ar = ['one','two','three','four','five']
ar.max_by(&:length) # => "three"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37399514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档