From: Michael Fellinger Date: 2010-06-19T06:09:16+09:00 Subject: Re: String comparison. Why does Ruby consider this true? On Sat, Jun 19, 2010 at 3:43 AM, Josh Cheek wrote: > On Fri, Jun 18, 2010 at 12:46 PM, Abder-rahman Ali < > abder.rahman.ali@gmail.com> wrote: > >> When I try for example to compare the following strings in Ruby, I get >> "true". >> >> puts 'Xeo' < 'ball' >> >> When I make 'Xeo' start with a lowercase letter, i get 'false' >> >> puts 'xeo' < 'ball' >> >> The second statement is clear, but why when I capitalize 'Xeo' I get >> true? >> >> Thanks. >> -- >> Posted via http://www.ruby-forum.com/. >> >> > Well, this used to be easy to show, but apparently since ascii has been > abandoned, and I don't know unicode, I have to resort to hacky things like > this to explain it. > > > $chars = (1..128).inject(Hash.new) { |chars,num| chars[num.chr] = num ; > chars } > > def to_number_array(str) >  str.split(//).map { |char| $chars[char] } > end > > to_number_array 'Xeo'   # => [88, 101, 111] > to_number_array 'xeo'   # => [120, 101, 111] > to_number_array 'ball'  # => [98, 97, 108, 108] > to_number_array 'ABC'   # => [65, 66, 67] > to_number_array 'abc'   # => [97, 98, 99] >> %w[Xeo xeo ball ABC abc].sort.each{|word| p word => word.codepoints.to_a } {"ABC"=>[65, 66, 67]} {"Xeo"=>[88, 101, 111]} {"abc"=>[97, 98, 99]} {"ball"=>[98, 97, 108, 108]} {"xeo"=>[120, 101, 111]} => ["ABC", "Xeo", "abc", "ball", "xeo"] -- Michael Fellinger CTO, The Rubyists, LLC