散列中元素的順序不能保證。如果您需要保證訂單,則必須對密鑰進行排序。
我認爲這應該在Ruby 1.9中修復。
編輯:我假設數組中的搜索結果,如果一個Hash然後順序不能保證,你將不得不鍵排序,這裏是我的測試是什麼樣子:
#!/usr/bin/ruby -W
require 'pp'
require 'set'
results = Array.new
results << {:url => 'http://lifehacker.com'}
results << {:url => 'http://stackoverflow.com'}
results << {:url => 'http://43folders.com'}
results << {:url => 'http://lolindrath.com'}
results << {:url => 'http://stackoverflow.com'}
results << {:url => 'http://lifehacker.com'}
@search_results = Array.new
duplicates = Set.new
results.each { |result| @search_results.push(result) unless duplicates.add?(result[:url])}
puts "## @search_results"
pp @search_results
如果我運行,這裏的結果:
## @search_results
[{:url=>"http://stackoverflow.com"}, {:url=>"http://lifehacker.com"}]
我發現奇怪的,所以只是可以肯定,我把.nil?
加.add?
結束,這裏是我的結果:
## @search_results
[{:url=>"http://lifehacker.com"},
{:url=>"http://stackoverflow.com"},
{:url=>"http://43folders.com"},
{:url=>"http://lolindrath.com"}]
現在那是我所期待的:這是什麼意思是「亂碼」?
編輯2:經進一步調查,我想這是因爲Ruby的超級嚴格的規定,將非布爾數據,布爾運算符(見Ruby Gotchas on Wikipedia和Stack Overflow, of course)時,這樣基本上什麼,只有假的是真的假的,其他一切是真的。所以.nil?
顯式轉換爲true/false。
irb(main):007:0> puts "zero is true" if 0
zero is true
=> nil
irb(main):008:0> puts "zero is false" unless 0
=> nil
變量「結果」來自哪裏?它的順序可能是不確定的(例如,如果它是哈希或集合)。 – Chuck 2009-02-05 23:48:12
請定義'亂碼':你期望它們在什麼順序?訂單如何變化? – Lolindrath 2009-02-06 12:56:05
@chuck - 結果是一個數組。 @Lolindrath - 我期望的順序與它插入的順序相同。相反,它給出了一個隨機順序。 – Sanjay 2009-02-06 13:13:14