我不明白为什么min
选择最长的字符串而不是最短的字符串:
x='AGG'
y='AAAACTGACCCACCCCAGG'
[x,y].min #=> "AAAACTGACCCACCCCAGG" # why is this the min one?
[x,y].max #=> "AGG"
a='AGAGACTTA'
b='AAA'
[b,a].min #=> "AAA" # good
[b,a].max #=> "AGAGACTTA"
答案 0 :(得分:1)
因为它不是按字符串长度进行比较,而是按字典顺序进行比较;并AA
来到AG
之前。如果要按长度进行比较,则需要指定它:
p [x,y].min_by(&:length)
答案 1 :(得分:1)
通常Ruby使用名为lexicographical ordering的东西来获取最小和最大字符串。因此AGG > AAAACTGACCCACCCCAGG
,因为G > A
(他们的第一个字母不同)。
要获得预期的行为,您需要手动提供比较器块,如下所示:
[x,y].min { |x,y| x.size <=> y.size }
答案 2 :(得分:0)
问题是min / max不能达到你的想象。它不比较字符串大小,只是按字母顺序给你第一个。 幸运的是,min / max函数允许您定义如何检查哪个对象更大。尝试类似:
arr.min {|a,b| a.length <=> b.length}
arr.max {|a,b| a.length <=> b.length}
答案 3 :(得分:0)
Ruby的min函数按字符串是否大于另一个字符串进行排序。在这种情况下,字符串Y出现在字母表中比字符串X更早,因此它比字符串X小。如果你想找到哪个是最短的字符串,你可以做类似的事情。
[x,y].min_by(&:length)
=> "AGG"
找到你要做的最长的字符串
[x,y].max_by(&:length)