如何根据已处理项目的数量显示进度,而不是使用“ruby-progressbar”显示其“成本”的数量?

问题描述 投票:2回答:1

让我们用随机数初始化一个数组。现在让我们创建一个ProgressBar,其中所有数字的总和作为其大小。我们可以轻松遍历所有数字并使用每个数字递增进度条,这为我们提供了非常简洁和精确的进度:

require 'ruby-progressbar'

items = Array.new(100) { rand 1..10 }

progress_bar = ProgressBar.create total: items.sum, format: '%a %e %P% Processed: %c from %C items'

items.each do |item|
  sleep item / 100.0
  progress_bar.progress += item
end

但是,用户有兴趣查看在进度持续时处理了多少项目而不是项目的加权成本。现在我们展示Processed: 270 from 516 items,它是已处理项目与总和的总和。相反,我想展示Processed: 53 from 100 items,但留下幕后的总和和现在的增量,否则进度条将不准确。

ruby-progressbar提供the following flags for formatting

我没有看到任何放置占位符或在其中获取值的选项。

ruby iteration progress-bar progress
1个回答
1
投票

您可以在格式字符串中自己更新customize format string in realtime while processing并更新值。下面是修改过的脚本,向您展示我的意思:

require 'ruby-progressbar'

items = Array.new(100) { rand 1..10 }
current = 0
count = items.count
progress_bar = ProgressBar.create total: items.sum, format: "%a %e %P% Processed: #{current} from #{count} items"

items.each do |item|
  sleep item / 100.0
  current += 1
  progress_bar.format = "%a %e %P% Processed: #{current} from #{count} items"
  progress_bar.progress += item
end

样本输出:Time: 00:00:01 ETA: 00:00:04 29.48% Processed: 27 from 100 items

© www.soinside.com 2019 - 2024. All rights reserved.