Nano Hash - криптовалюты, майнинг, программирование

Array.copy две лямбды, сложно использовать вторую в linq

У меня большие проблемы с кодом пояснения ниже, тем временем я сделал две функции цикла, которые делают одно и то же. Я отправляю свой код другу, чтобы он сказал мне, можно ли сделать проще :) Итак, я получаю что-то вроде этого.

Array.Copy(
    myImageData
        .Select(
            (b, index) =>
                (
                    index > rooflimit && index < floorlimit && b == 252 &&
                    (myImageData[index + width] == 0 || (myImageData[index + width] > 168 && myImageData[index + width] < 173)) &&
                    myImageData[index - width] == 252 &&
                    myImageData[index - (2 * width)] == 159
                ) ? (byte)172 : b
        ).ToArray(),
    rooflimit + 1,
    myImageData,
    rooflimit + 1,
    floorlimit - rooflimit - 1
);

Мои циклы делали что-то подобное (выше делали то же самое):

  1. когда вы получите все пиксели, скопируйте их в массив байтов
  2. найти все пиксели, которые имеют значение 255, пиксель ниже имеет 0 или находится в диапазоне 168-173
  3. пиксель выше имеет значение 255, а пиксель 2 раза выше имеет значение 159
  4. если бы я обнаружил, что пиксель изменил это значение на 172
  5. * проверка пикселей начинается со второй строки [0][1][2] и заканчивается перед последней строкой, чтобы иметь возможность проверять пиксели выше и ниже текущего пикселя *

Я почти понял этот код выше, однако я не понимаю ту часть, которая начинается с:

rooflimit + 1, 
myImageData, 
rooflimit + 1, 
floorlimit - rooflimit - 1);

Поэтому прошу помощи, спасибо! PS. пожалуйста, измените тему, если она не очень хорошо указана.

15.10.2011


Ответы:


1

Последние четыре параметра являются последними параметрами для Array.Copy. Ваш код будет понятнее, если вы разделите его:

byte[] tmp = myImageData.Select([... big lambda expression ...])
                        .ToArray();

Array.Copy(tmp, rooflimit + 1, 
           myImageData, rooflimit + 1,
           floorlimit - rooflimit - 1);

У меня также возникло бы большое искушение использовать здесь отдельный метод вместо лямбда-выражения — на самом деле это слишком сложно для чтения.

15.10.2011
  • было бы хорошо сравнить Array.Copy() с Marshall.Copy()? 15.10.2011
  • @Cooldown4seconds: Нет, я так не думаю. Вы не пытаетесь маршалировать для целей взаимодействия — вы просто копируете часть одного массива в другой. 15.10.2011

  • 2

    Я думаю, что для этого лучше посмотреть MSDN Array.Copy:

    Копирует диапазон элементов из массива, начиная с указанного исходного индекса, и вставляет их в другой массив, начиная с указанного целевого индекса. Длина и индексы указываются как 32-битные целые числа.

    15.10.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..