From: phasis@... Date: 2014-05-30T02:31:21+00:00 Subject: [ruby-core:62846] [ruby-trunk - Bug #9882] Issue with hash string keys Issue #9882 has been updated by Heesob Park. This issue is due to the different result of String#hash of each string. Why `slice_url.hash != str.hash` in splite of `slice_url == str` ? And I found the root cause is `slice_url.ascii_only? != str.ascii_only?` ~~~ C:\work>irb irb(main):001:0> context = "Marriott International World���s Most ADMIRED Lodging Company by FORTUNE for 14th yr. via @FortuneMagazine http://cnnmon.ie/1kcFZSQ" => "Marriott International World���s Most ADMIRED Lodging Company by FORTUNE for 14th yr. via @FortuneMagazine http://cnnmon.ie/1kcFZSQ" irb(main):002:0> slice_url = context.slice(105,24) => "http://cnnmon.ie/1kcFZSQ" irb(main):003:0> str = "http://cnnmon.ie/1kcFZSQ" => "http://cnnmon.ie/1kcFZSQ" irb(main):004:0> slice_url.hash => 1022346954 irb(main):005:0> str.hash => 1022346949 irb(main):006:0> slice_url.ascii_only? => false irb(main):007:0> str.ascii_only? => true ~~~ ---------------------------------------- Bug #9882: Issue with hash string keys https://bugs.ruby-lang.org/issues/9882#change-46966 * Author: Tim Oommen * Status: Open * Priority: Normal * Assignee: * Category: core * Target version: * ruby -v: 2.1.1p76 * Backport: 2.0.0: REQUIRED, 2.1: REQUIRED ---------------------------------------- I have the following code. In a nutshell i am slicing a string to pull out strings to use as keys in a hash. However when running the following code, I am getting odd results. ~~~ruby context = "Marriott International World���s Most ADMIRED Lodging Company by FORTUNE for 14th yr. via @FortuneMagazine http://cnnmon.ie/1kcFZSQ" slice_url = context.slice(105,24) str = "http://cnnmon.ie/1kcFZSQ" slice_url == str redirects = {"http://cnnmon.ie/1kcFZSQ"=>"http://money.cnn.com/2014/02/06/leadership/marriott-hotels.pr.fortune"} redirects.key?(slice_url) redirects.key?(str) ~~~ The `slice_url` and `str` are equal, however when I look for the key in redirects with `slice_url` I get a `nil`, but when setting the string variable manually, I get a match and value. I am not sure if this is an issue with the value returned by the string slice method or an issue with the hash. -- https://bugs.ruby-lang.org/