如何根据已处理项目的数量而不是 "costs" 和 "ruby-progressbar" 的数量来显示进度?

How to show progress based on the number of processed items instead of the number of their "costs" with "ruby-progressbar"?

让我们用随机数初始化一个数组。 现在让我们创建一个 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

我没有看到任何用于放置占位符或派生值的选项。

您可以 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