如何在ruby中按字母顺序比较数组的值? (没有.sort)

时间:2014-05-05 14:04:18

标签: ruby arrays sorting

作为练习的一部分,我应该比较一个数组的元素,并在不使用.sort的情况下对它们进行排序。网上有很多这方面的内容,但我找不到这个特别关注的答案:

words =  [ 'a', 'b']

if words.at(0).to_s > words.at(1).to_s
    puts true
else
    puts false
end

终端输出:

$irb > false

我的问题: a 如何不超过 b ? (这让我发疯了,我已尝试过这段代码的许多变化......)

2 个答案:

答案 0 :(得分:1)

  

如何不大于b?

按惯例,它不是基于英语/拉丁字母,以及这些字母如何用Ruby字符串表示。字母'a'小于'b',这在我能想到的所有计算机语言和系统上都是一样的。

这也与1小于2一致,假设字符按英文字母表中的典型位置计算/评分。这恰好是计算机如何用ASCII代码表示它们(其中'a'用97表示,'b'用98表示)。

如果您需要/期望在'a'和'b'之间进行测试以返回true以使您的排序算法正常工作,只需将>反转为<或切换01索引以获得正确的逻辑。

由于早期计算机系统上对重音字符的支持不足,可能会发生更有趣(或烦人)的比较,并且它们的字符代码并不总是对排序最有用。例如。 'À' > 'Z' # => true

答案 1 :(得分:0)

没有理由期望a大于b。直觉上,b大于a,就是它在Ruby中的表现。顺便说一下,你的代码可以短得多:

words = %w(a b)
puts words[0] > words[1]