Выполнение действия на каждый 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]}; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д