Ruby: сравнение двух массивов хэшей

Я определенно новичок в ruby (и использую 1.9.1), поэтому любая помощь приветствуется. Все, что я узнал о Ruby, было получено от использования Google. Я пытаюсь сравнить два массива хэшей, и из-за размеров он становится длинным и заигрывает с нехваткой памяти. Любая помощь будет оценена.

У меня есть класс (ParseCSV) с несколькими методами (инициализация, открытие, сравнение, удаление, вывод). Сейчас я работаю так (и это проходит тесты, которые я написал, просто используя намного меньший набор данных):


file1 = ParseCSV.new(“some_file”)
file2 = ParseCSV.new(“some_other_file”)

file1.open #this reads the file contents into an Array of Hash’s through the CSV library 
file1.strip #This is just removing extra hash’s from each array index.  So normally there are fifty hash’s in each array index, this is just done to help reduce memory consumption.  

file2.open 
file2.compare(“file1.storage”) #@storage is The array of hash’s from the open method

file2.output

Теперь я борюсь с методом сравнения. Работа с небольшими наборами данных - это совсем не проблема, достаточно быстро. Однако в этом случае я сравниваю около 400 000 записей (все считываются в массив хэшей) с той, которая имеет около 450 000 записей. Я пытаюсь ускорить это. Также я не могу запустить метод стриптиза в файле2. Вот как я это делаю сейчас:


def compare(x)
    #obviously just a verbose message
    puts "Comparing and leaving behind non matching entries"

    x.each do |row|
        #@storage is the array of hashes
        @storage.each_index do |y|       
            if row[@opts[:field]] == @storage[y][@opts[:field]]
               @storage.delete_at(y)
            end
       end
    end
end

Надеюсь, это имеет смысл. Я знаю, что это будет медленный процесс только потому, что он должен повторять 400 000 строк по 440 000 раз каждая. Но есть ли у вас другие идеи о том, как ускорить его и, возможно, сократить потребление памяти?

Ответы на вопрос(2)

Ваш ответ на вопрос