C# 从x长度列表计算百分比步长
我正在创建一个Customer进度对话框,用于跟踪对象列表中有多少已上载到Web服务。程序如下:C# 从x长度列表计算百分比步长,c#,progress,C#,Progress,我正在创建一个Customer进度对话框,用于跟踪对象列表中有多少已上载到Web服务。程序如下: 接收长度为x的项目列表(始终不同) 将列表拆分为20个对象的块(单个数组) 一个一个上传区块(为避免Web服务过载,需要) 每次数据块上传后,更新进度视图,以到目前为止已完成的数据块的百分比表示,最高可达100% 我如何根据x长度数组划分为20个块的情况,计算每个块的单个百分比,最大为100% // preparation var chunkCount = (TotalItemCount - (
- 接收长度为x的项目列表(始终不同)
- 将列表拆分为20个对象的块(单个数组)
- 一个一个上传区块(为避免Web服务过载,需要)
- 每次数据块上传后,更新进度视图,以到目前为止已完成的数据块的百分比表示,最高可达100%
// preparation
var chunkCount = (TotalItemCount - (TotalItemCount % 20)) / 20 + (TotalItemCount % 20 > 0 ? 1 : 0);
var percentage = 0.00d;
// progress
var chunkSize = ... // 20 or less for the last
var currentChunkIndex = ...
percentage += (chunkSize + (currentChunkIndex * 20)) / TotalItemCount;
此计算将确保最后一个区块的百分比也是正确的
len - length of the list
chunk_size = 20 - chunk size
chunk_count - number of chunks
individual_percentage - what percentage of all chunks is one chunk
last_percentage - what percentage of all chunks is the last chunk
which might be smaller than 20
chunk_count = len / chunk_size
chunk_count = len / 20
individual_percentage = 100 / chunk_count
last_percentage = 100 - (individual_percentage * (chunk_count - 1))
此计算将确保最后一个块的百分比也是正确的。如果总大小为
n
,则首先需要找出20的百分比。要获得该值,您需要计算
len - length of the list
chunk_size = 20 - chunk size
chunk_count - number of chunks
individual_percentage - what percentage of all chunks is one chunk
last_percentage - what percentage of all chunks is the last chunk
which might be smaller than 20
chunk_count = len / chunk_size
chunk_count = len / 20
individual_percentage = 100 / chunk_count
last_percentage = 100 - (individual_percentage * (chunk_count - 1))
unitSize = 100 * (20 / n);
现在,如果您有一个以前的百分比,那么在20块完成后,更新它:
previousPercentage += unitSize;
其中,
previousPercentage
将被初始化为0。首先,如果总大小为n
,您需要找出20的百分比。要获得该值,您需要计算
unitSize = 100 * (20 / n);
现在,如果您有一个以前的百分比,那么在20块完成后,更新它:
previousPercentage += unitSize;
其中,
以前的百分比
将初始化为0。有两种可能的解决方案:
int count;
int processed;
int progress;
var collection = Enumerable.Range(1, 111).ToList();
var chunks = collection.Partition(20).ToList();
Console.WriteLine("Process chunks (Progress from chunks)");
count = chunks.Count;
processed = 0;
foreach (var item in chunks)
{
// do some actions with the chunk
processed++;
progress = processed * 100 / count;
Console.WriteLine(progress);
}
生成的输出:
Process chunks (Progress from chunks)
16
33
50
66
83
100
Process chunks (Progress from chunk.Count)
18
36
54
72
90
100
生成的输出:
Process chunks (Progress from chunks)
16
33
50
66
83
100
Process chunks (Progress from chunk.Count)
18
36
54
72
90
100
有两种可能的解决方案:
int count;
int processed;
int progress;
var collection = Enumerable.Range(1, 111).ToList();
var chunks = collection.Partition(20).ToList();
Console.WriteLine("Process chunks (Progress from chunks)");
count = chunks.Count;
processed = 0;
foreach (var item in chunks)
{
// do some actions with the chunk
processed++;
progress = processed * 100 / count;
Console.WriteLine(progress);
}
生成的输出:
Process chunks (Progress from chunks)
16
33
50
66
83
100
Process chunks (Progress from chunk.Count)
18
36
54
72
90
100
生成的输出:
Process chunks (Progress from chunks)
16
33
50
66
83
100
Process chunks (Progress from chunk.Count)
18
36
54
72
90
100
已处理/总=完成百分比100/(总长度/20)@Romano,这将是一个常数value@SirRufo你的回答完全正确。此处需要与上载计数器相乘:(100/(总长度/20))*uploadCountprocessed/total=完成百分比100/(总长度/20)@Romano,这将是一个常数value@SirRufo你的回答完全正确。此处需要与上载计数器相乘:(100/(总长度/20))*uploadCount