Выполнение действия на каждый 1000-ое i в цикле - C#
Формулировка задачи:
Добрый день.
Подскажие, пожалуйста, логику или пример кода на следующее действие.
Идёт простой цикл. Где проверяются два файла. Если есть отличие в по одному и тому же адресу в значении, то мы должны, это значение записать в файл с указанием адреса и значения, которые отличаются.
Но так как адресов получается много, то для дальнейшей их обработки, мне нужно их поделить по участки по 1000 записей в каждой.
Я не могу понять, как мне выразить, что тут i = 1000, а тут i = 2000, а тут i = 18000 ?
Я пробовал i / 1000, и если число получается без дроби, десятков, сотых и т.д. но нужно выполнять разбивку.
Но вот как прописать это???
for (int i = 0; i < size_edit; i++)
{
if (bytes1[i] != bytes2[i])
{
//Действие
}
}
Начало Блок 1
1 запись
***
1000 запись
Конец Блок 1
Начало Блок 2
1001 запись
***
2000 запись
Конец Блок 2
Начало Блок 3
2001 запись
***
2236 запись
Конец Блок 3
Решение задачи: «Выполнение действия на каждый 1000-ое i в цикле»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ConsoleApplication15
{
class Info
{
public int Index { get; set; }
public int Expected { get; set; }
public int Actual { get; set; }
}
class Program
{
private const int blockSize = 1000;
private static void Main()
{
byte[] a = new byte[10000];
byte[] b = new byte[a.Length];
b[0] = 10;
b[10] = 100;
b[83] = 2;
var diff = GetDiff(a, b);
foreach (var v in diff)
{
Console.WriteLine("Expected {0} but actual is {1} on index {2}", v.Expected, v.Actual, v.Index);
}
}
private static IEnumerable<Info> GetDiff(byte[] a, byte[] b)
{
var result = new List<Info>();
Parallel.For(0, a.Length,
() => new List<Info>(),
(i, state, indices) =>
{
indices.AddRange(CheckBlock(a, b, i));
return indices;
},
indices =>
{
lock (result)
{
result.AddRange(indices);
}
});
return result;
}
private static IEnumerable<Info> CheckBlock(byte[] a, byte[] b, int index)
{
for (int i = index * blockSize; i < Math.Min(a.Length, (index+1)*blockSize); i++)
{
if (a[i] != b[i])
yield return new Info(){Index = i, Expected = a[i], Actual = b[i]};
}
}
}
}