powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / C#, работа с массивами через LINQ и лямбда-функции
2 сообщений из 2, страница 1 из 1
C#, работа с массивами через LINQ и лямбда-функции
    #39138447
Tavion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начинаю изучать C#, пилю личный проект в тренировочных целях, и столкнулся с такой ситуацией:

Имеется одномерный массив inputArray, содержащий 9 экземпляров некоего класса Cell. Одним из полей в Cell является одномерный массив из девяти boolean`ов PossibleValues. Требовалось найти в inputArray такие экземпляры Cell, где в PossibleValues есть всего два true и собрать эти Cell (если таковые будут) в новый массив. Я сделал это так:

Код: c#
1.
Cell[] arr = inputArray.Where(x => x.PossibleValues.Where(x => x).Count() == 2).ToArray();



Далее нужно найти в arr такие пары Cell`ов, у которых PossibleValues будут полностью совпадать (оба true будут по одним и тем же индексам).
При обнаружении такой пары, нужно запомнить индексы их true и скинуть PossibleValues по этим индексам в false всем Cell в inputArray, кроме тех, что мы только что нашли. При этом таких пар может быть более одной.

Есть способ как-то компактно это сделать с помощью LINQ?
...
Рейтинг: 0 / 0
C#, работа с массивами через LINQ и лямбда-функции
    #39138524
Tavion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже решил сам, получилось так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
var couples = arr.SelectMany(x => arr.Select(c => new { a = x, b = c }))
                  .Where(z => z.a != z.b)
                  .Where(z => z.a.PossibleValues.SequenceEqual(z.b.PossibleValues)).ToArray();

var indexes = new List<int>();

foreach (var couple in couples)
{
    for (int n = 0; n < 9; n++)
    {
        if (couple.a.PossibleValues[n] && !indexes.Contains(n))
        {
            indexes.Add(n);
        }
    }
}

inputArray.Except(couples.Select(z => z.a)).ForEach(cell => indexes.ForEach(n => cell.PossibleValues[n] = false));
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / C#, работа с массивами через LINQ и лямбда-функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]