Как перебирать несколько массивов, используя один l oop? - PullRequest
1 голос
/ 07 августа 2020

У меня есть несколько массивов (в настоящее время 2) одного типа, и мне нужно выполнить аналогичные операции с этими массивами.

Custom[] array1 = new Custom[10];
Custom[] array2 = new Custom[20];

// Assign values to array1 and array2

foreach(var v in array1)
{
// Do some operations
}

foreach(var v in array2)
{
// Do some operations
}

В обоих foreach loops я выполняю аналогичные операции с объектами в массив. Эти операции действительно изменяют некоторые свойства объектов в массивах в зависимости от условий.

Есть ли способ объединить foreach loops? Я хочу сохранить оба массива такими, какие они есть в конце процесса, поэтому я не могу копировать один массив в другой или что-то в этом роде. Я также хотел бы избежать создания нового массива, который содержит оба объединенных массива (я думаю, что это может вызвать проблему с пространством, поскольку здесь Custom может быть типами значений или ссылочными типами).

Одно из найденных мной решений - имея отдельную функцию, которая содержит foreach loop, а затем вызывает функцию для нескольких массивов.

private void DoOperations(Custom[] array)
{
    foreach(var v in array)
    {
    // Do some operations
    }
}

// In main
DoOperations(array1);
DoOperations(array2);

Я просто хочу знать, есть ли другой способ достичь этого, поскольку мне нужно иметь еще несколько например foreach loops, некоторые из которых содержат очень тривиальный код.

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

См. Реализацию ниже

 public Func<custom[], custom[]> performOperation { get; set; }
 public custom[] iterateArray(custom[] arg)
        {
            foreach (var item in arg)
            {
                //Do operation
            }

            return arg;
        }

затем вы можете назначить делегата методу iterateArray и вызвать его, см. Ниже

    performOperation = iterateArray;
    performOperation(new custom[]{});

Таким образом вы можете вызвать делегата для нескольких массивы одного типа, и если операция logi c должна измениться для любого массива, вы можете реализовать метод, который соблюдает подпись делегата, и назначить его делегату.

0 голосов
/ 07 августа 2020
Custom[] array1 = new Custom[10];
Custom[] array2 = new Custom[20];

var arr = arr1.Union(arr2).ToArray();

foreach(var v in array)
{
    // Do some operations
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...