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

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

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

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

Решение задачи: «Выполнение действия на каждый 1000-ое i в цикле»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading.Tasks;
  4.  
  5. namespace ConsoleApplication15
  6. {
  7.     class Info
  8.     {
  9.         public int Index { get; set; }
  10.         public int Expected { get; set; }
  11.         public int Actual { get; set; }
  12.     }
  13.     class Program
  14.     {
  15.         private const int blockSize = 1000;
  16.         private static void Main()
  17.         {
  18.             byte[] a = new byte[10000];
  19.             byte[] b = new byte[a.Length];
  20.             b[0] = 10;
  21.             b[10] = 100;
  22.             b[83] = 2;
  23.             var diff = GetDiff(a, b);
  24.             foreach (var v in diff)
  25.             {
  26.                 Console.WriteLine("Expected {0} but actual is {1} on index {2}", v.Expected, v.Actual, v.Index);
  27.             }
  28.         }
  29.  
  30.         private static IEnumerable<Info> GetDiff(byte[] a, byte[] b)
  31.         {
  32.             var result = new List<Info>();
  33.             Parallel.For(0, a.Length,
  34.                          () => new List<Info>(),
  35.                          (i, state, indices) =>
  36.                          {
  37.                              indices.AddRange(CheckBlock(a, b, i));
  38.                              return indices;
  39.                          },
  40.                          indices =>
  41.                          {
  42.                              lock (result)
  43.                              {
  44.                                  result.AddRange(indices);
  45.                              }
  46.                          });
  47.             return result;
  48.         }
  49.  
  50.  
  51.         private static IEnumerable<Info> CheckBlock(byte[] a, byte[] b, int index)
  52.         {
  53.             for (int i = index * blockSize; i < Math.Min(a.Length, (index+1)*blockSize); i++)
  54.             {
  55.                 if (a[i] != b[i])
  56.                     yield return new Info(){Index = i, Expected = a[i], Actual = b[i]};
  57.             }
  58.         }
  59.     }
  60. }

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


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

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

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы