Выполнение действия на каждый 1000-ое i в цикле - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Подскажие, пожалуйста, логику или пример кода на следующее действие. Идёт простой цикл. Где проверяются два файла. Если есть отличие в по одному и тому же адресу в значении, то мы должны, это значение записать в файл с указанием адреса и значения, которые отличаются.
                for (int i = 0; i < size_edit; i++)                
                {
                     if (bytes1[i] != bytes2[i])
                    {
                            //Действие
                    }
 
                }
Но так как адресов получается много, то для дальнейшей их обработки, мне нужно их поделить по участки по 1000 записей в каждой.
Начало Блок 1 1 запись *** 1000 запись Конец Блок 1 Начало Блок 2 1001 запись *** 2000 запись Конец Блок 2 Начало Блок 3 2001 запись *** 2236 запись Конец Блок 3
Я не могу понять, как мне выразить, что тут i = 1000, а тут i = 2000, а тут i = 18000 ? Я пробовал i / 1000, и если число получается без дроби, десятков, сотых и т.д. но нужно выполнять разбивку. Но вот как прописать это???

Решение задачи: «Выполнение действия на каждый 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]};
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы