Ruby Put периодические сообщения о ходе выполнения при отображении
Я сопоставляю массив предметов, но коллекция может быть довольно большой. Я хотел бы посылать сообщения на консоль время от времени, чтобы показать прогресс. Есть ли способ сделать это во время процесса картирования?
Это мое утверждение карты:
famgui = family_items.map{|i|i.getGuid}
У меня есть определение, которое я использую для предоставления обновления, когда я делаю для каждого цикла или цикла.
Это определение:
def doneloop(saymyname, i)
if (i%25000 == 0 )
puts "#{i} #{saymyname}"
end
end
Обычно я ставлю x = 0, прежде чем начать цикл, затем x +=1, как только я нахожусь в цикле, а затем в конце моего цикла, я ставлю saymyname = "specific type items gathered at #{Time.now}"
Затем я положил doneloop(saymyname, x)
Я не уверен, как это сделать, когда я картирую, поскольку нет цикла, чтобы построить это вокруг. У кого-нибудь есть способ давать обновления при использовании карты?
Спасибо!
2 ответа
Только последнее выражение возвращается с карты, поэтому вы можете сделать что-то вроде:
famgui = family_items.with_index.map do |i, idx|
if idx % 100 == 0
puts # extra linefeed
# report every 100th round
puts "items left: #{family_items_size - idx}"
STDOUT.flush
end
current_item += 1
print "."
STDOUT.flush
i.getGuid
end
Это напечатает "." за каждый элемент и отчет о состоянии после каждых 100 пунктов.
Если вы хотите, вы можете использовать each_with
и заполнить массив самостоятельно, как:
famgui = []
family_items.each_with_index do |i, idx|
famgui << i.getGuid
puts "just did: #{idx} of #{family_items.size}"
end
Вы можете сопоставить с индексом:
famgui = family_items.with_index.map {|item, index| item.getGuid; doneloop('sth', index)}