Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从x长度列表计算百分比步长_C#_Progress - Fatal编程技术网

C# 从x长度列表计算百分比步长

C# 从x长度列表计算百分比步长,c#,progress,C#,Progress,我正在创建一个Customer进度对话框,用于跟踪对象列表中有多少已上载到Web服务。程序如下: 接收长度为x的项目列表(始终不同) 将列表拆分为20个对象的块(单个数组) 一个一个上传区块(为避免Web服务过载,需要) 每次数据块上传后,更新进度视图,以到目前为止已完成的数据块的百分比表示,最高可达100% 我如何根据x长度数组划分为20个块的情况,计算每个块的单个百分比,最大为100% // preparation var chunkCount = (TotalItemCount - (

我正在创建一个Customer进度对话框,用于跟踪对象列表中有多少已上载到Web服务。程序如下:

  • 接收长度为x的项目列表(始终不同)
  • 将列表拆分为20个对象的块(单个数组)
  • 一个一个上传区块(为避免Web服务过载,需要)
  • 每次数据块上传后,更新进度视图,以到目前为止已完成的数据块的百分比表示,最高可达100%
我如何根据x长度数组划分为20个块的情况,计算每个块的单个百分比,最大为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