Порядок элементов в хеше не гарантируется. Вам нужно будет отсортировать ключи, если вы хотите получить гарантированный заказ.
Это, предположительно, исправлено в Ruby 1.9, я считаю.
Edit: Я предполагаю, что ваши результаты в массиве, если его хэш-то порядок не гарантируется, и вам придется сортировать ключи, вот что мой тест выглядит следующим образом:
#!/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"}]
было то, что я ожидал: это то, что вы подразумеваете под «искаженным»?
Edit 2: При дальнейшем расследовании, я думаю, что это из-за супер строгих правил Руби при преобразовании без логических данных в булевы (см 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
Пожалуйста, определите 'garbled': какой порядок вы ожидаете от них? Как изменился порядок? – Lolindrath
@chuck - результаты - это массив. @Lolindrath - Я ожидаю, что порядок будет таким же, как и порядок его вставки. Вместо этого он дает случайный порядок. – Sanjay