我有过
book_1 = "War & Peace"
book_2 = "The Nest of Gentry"
puts book_1.length
puts book_2.length
print book_1 <=> book_2 返回值1?维基百科说“如果左边的参数大于右边的参数,运算符返回1。”它是在什么基础上大于或小于?我还打印了每个字符串的长度,第一个字符串比第二个字符串小。请解释一下。
发布于 2015-12-16 14:53:27
在比较两个字符串时,大多数编程语言都会返回“在标准字典中最先找到谁?”这也被称为“字典序”。
发布于 2015-12-16 15:08:43
字符串与字典序顺序进行比较。Ruby-Doc String
正如ruby官方文档中提到的,如果字符串的长度不同,并且字符串与最短长度比较时相等,则认为较长的字符串大于较短的字符串。<=>是module Comparable中包含的<, <=, >, >=, and between?,方法的基础。String#==方法不使用Comparable#==.
"abcdef" <=> "abcde" #=> 1
"abcdef" <=> "abcdef" #=> 0
"abcdef" <=> "abcdefg" #=> -1
"abcdef" <=> "ABCDEF" #=> 1希望这能帮到你。
发布于 2015-12-16 15:08:55
很难相信,如今人们更愿意在维基百科上查找关于这类问题的答案。Ruby有一个很棒的文档:String#<=>。通过点击此描述右上角的“切换源”,可以很容易地看到“默认”比较是使用rb_str_cmp进行的,显然是使用“字典序”进行排序。另一方面,在所有Comparable场景中都使用<=>运算符,因此可以轻松地修改字符串列表的排序行为:
class String
def <=> other
other = other.to_s unless other.is_a? String # or raise an exception
self.length <=> other.length
end
end
["War & Peace", "Zoo", "Aleph", "The Nest of Gentry"].sort
#⇒ ["Zoo", "Aleph", "War & Peace", "The Nest of Gentry"]在后一个示例中,排序是按长度进行的。
https://stackoverflow.com/questions/34305561
复制相似问题