Хобрук: Ваш путь к мастерству в программировании

Итератор LINQ .Any() для 2D-массива - [,]

Как правильно обрабатывать 2D-массив с помощью LINQ?

int[,] array =
{
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};

bool anyZeroes = array.Any(value => value == 0)     // example

Я хочу проверить, соответствует ли какая-либо переменная в массиве Func, == 0 в этом случае. Как я могу использовать Any для этого и что здесь лучше всего?

13.04.2015

  • Этот код компилируется или он должен указывать на ваше намерение? 13.04.2015
  • Это то, как я хотел бы, чтобы это написали. 13.04.2015
  • Хорошо. Я почти уверен, что это не работает, потому что массив векторного стиля, который вы там получили (2D, как бы вы его ни называли), не реализует IEnumerable<T>, то есть это невозможно. 13.04.2015
  • Ага... Вопрос, который он дублирует, объясняет. Лично я вообще избегаю использования массивов типа [ , ]. Я никогда не видел примера, где они были бы более подходящими или полезными, чем List<T[]> или массив массивов. 13.04.2015
  • Когда у вас есть сетка фиксированного размера, как в настольной 2D-игре, что еще вы должны использовать? List ошибочно предполагают, что элементы могут быть добавлены, что приведет к неопределенному поведению. 13.04.2015
  • На самом деле это одно из его хороших применений. Но, как говорится, в каждой игре, написанной на C++ и C, не было проблем с использованием старых простых массивов. Вы всегда можете реализовать класс Board, который обертывает что-то вроде List<int[]>. Лично я бы не стал использовать 2D-вектор за счет использования LINQ, но в этом случае я мог бы, по крайней мере, понять решение сделать это. 13.04.2015

Ответы:


1

Вот как вы можете сгладить список, чтобы проверить

bool anyZeroes = array.Cast<int>().Any(value => value == 0);// false
bool anyNines = array.Cast<int>().Any(value => value == 9);// true

Однако, если вы делаете несколько вызовов, вы должны сохранить его:

bool casted = array.Cast<int>();
bool anyZeroes = casted.Any(value => value == 0);// false
bool anyNines = casted.Any(value => value == 9);// true

Ссылка: https://stackoverflow.com/a/13822900/526704

13.04.2015
  • Вау, так просто! Почему я сам об этом не подумал? Спасибо 13.04.2015
  • мне немного нелогично, что массив с несколькими диммами можно так легко сгладить. Изначально я думал об этом как о List<List<T>> и пытался сделать SelectMany(), но это не сработало. Я думаю, Cast<T>() просто превращает его в IEnumerable, с которым LINQ лучше справляется. 13.04.2015
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..