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