有人可以解释为什么"time"
是最大值吗?
my_array = %w{hello my time here is long}
my_array.max #=> "time"
答案 0 :(得分:2)
因为t
中time
的字母my_array
在您的数组'hello' > 'time' # => false
'my' > 'time' # => false
'here' > 'time' # => false
'is' > 'time' # => false
'long' > 'time' # => false
中的位置更高。
这是一种方式,如何进行字符串比较:
my_array
要了解上述片段代码的输出,您必须查看String#<=>
文档。由于您的<=>
包含调用方法max
的所有字符串实例,因此构建{{1}}的输出。
文件说Enumerable#max
:
可枚举#max,不带块假设所有对象都实现
Comparable
。
答案 1 :(得分:0)
这是计算机如何查看字符串并进行比较。
如果我们查看每个单词的第一个字符,它会有所帮助,因为我们知道字母表是如何命令字母的:
%w[hello my time here is long].map{ |s| s[0] }.sort # => ["h", "h", "i", "l", "m", "t"]
但这并不能真正帮助实现它的可视化,所以在计算机看到它们时,请查看每个单词的字母:
%w[time tome].each do |w|
puts w.chars.map(&:ord).join(', ')
end
# >> 116, 105, 109, 101
# >> 116, 111, 109, 101
每个字母都有一个值。多年来,有许多不同的方式为计算机订购字母,这导致字符值映射改变。 EBCDIC和ASCII是最受欢迎但订单不同的。我们通常处理由操作系统设置的ASCII或衍生物。
查看单词中的字符如何由以下输出中的值表示。它应该使人们很容易理解计算机正在做什么。
%w[he hello help holler hollow].sort.each do |w|
puts '"%6s": %s' % [ w, w.chars.map(&:ord).join(', ') ]
end
# >> " he": 104, 101
# >> " hello": 104, 101, 108, 108, 111
# >> " help": 104, 101, 108, 112
# >> "holler": 104, 111, 108, 108, 101, 114
# >> "hollow": 104, 111, 108, 108, 111, 119