如何根据已处理项目的数量而不是其“项目”的数量显示进度;“成本”;加上;ruby progressbar;?

如何根据已处理项目的数量而不是其“项目”的数量显示进度;“成本”;加上;ruby progressbar;?,ruby,iteration,progress-bar,progress,Ruby,Iteration,Progress Bar,Progress,让我们用随机数初始化一个数组。 现在,让我们创建一个ProgressBar,将所有数字的总和作为其大小。 我们可以轻松地迭代所有数字,并用每个数字增加进度条,这为我们提供了一个非常整洁和精确的进度: require 'ruby-progressbar' items = Array.new(100) { rand 1..10 } progress_bar = ProgressBar.create total: items.sum, format: '%a %e %P% Processed: %

让我们用随机数初始化一个数组。 现在,让我们创建一个
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
但是,用户感兴趣的是在进度进行时处理了多少项目,而不是项目的加权成本。现在,我们显示了例如已处理的:516项中的270项,这是已处理项与总总和的总和。相反,我想显示
已处理:100个项目中的53个
,但将总数和增量保留在幕后,使其与现在一样,否则进度条将不准确

ruby progressbar
提供

我看不到任何用于放置占位符或在其中派生值的选项。

您可以自己在格式字符串中编辑和更新值。下面是经过修改的脚本,向您展示了我的意思:

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

示例输出:
时间:00:00:01 ETA:00:00:04 29.48%已处理:27个来自100个项目

因此您希望在进度条上显示加权和,但文本应显示已处理的作业数?确切地说,这就是想法:)我们只能通过使用加权和来实现精确的进度,因为作业具有不同的权重。