Как мне искать многомерный массив? - PullRequest
4 голосов
/ 22 мая 2011

В C #

Array.Find<T>(arrayName, value);

ищет одномерный массив.Есть ли способ сделать это для многомерного массива (например, myArray[,,])?

Ответы [ 3 ]

6 голосов
/ 22 мая 2011

Работая с Excel и VSTO, я постоянно работаю с многомерными массивами. Для многомерного массива, например Array.Find (), нет встроенных функций.

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

Если вы решите написать вспомогательный метод, он может выглядеть (очень грубо) примерно так:

// you could easily modify this code to handle 3D arrays, etc.
public static class ArrayHelper
{
    public static object FindInDimensions(this object[,] target, 
      object searchTerm)
    {
        object result = null;
        var rowLowerLimit = target.GetLowerBound(0);
        var rowUpperLimit = target.GetUpperBound(0);

        var colLowerLimit = target.GetLowerBound(1);
        var colUpperLimit = target.GetUpperBound(1);

        for (int row = rowLowerLimit; row < rowUpperLimit; row++)
        {
            for (int col = colLowerLimit; col < colUpperLimit; col++)
            {
                // you could do the search here...
            }
        }

        return result;
    }
}

Вы бы ссылались на статическое расширение, как это в других частях кода вашего приложения:

object[,] myArray = GetMyArray(); // gets an array[,]
myArray.FindInDimensions(someObject);
3 голосов
/ 22 мая 2011

Нет встроенной функции многомерного поиска. Вы должны написать это сами.

2 голосов
/ 22 мая 2011

Свести многомерный массив и затем использовать Array.Find.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...