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 раз каждая. Но есть ли у вас другие идеи о том, как ускорить его и, возможно, сократить потребление памяти?