From: Josh Cheek Date: 2010-06-19T06:21:33+09:00 Subject: Re: String comparison. Why does Ruby consider this true? --0016e6d7ea70e243570489548961 Content-Type: text/plain; charset=ISO-8859-1 On Fri, Jun 18, 2010 at 4:09 PM, Michael Fellinger wrote: > 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 > > Thanks, but it doesn't seem to work on 1.8 RUBY_VERSION # => "1.8.7" %w[Xeo xeo ball ABC abc].sort.each{|word| p word => word.codepoints.to_a } # => # ~> -:3: undefined method `codepoints' for "ABC":String (NoMethodError) # ~> from -:3:in `each' # ~> from -:3 And the 1.8 ways to get it don't work on 1.9 (ie "a"[0]) --0016e6d7ea70e243570489548961--