Возвращение индексов массива для положительных значений массива - массив является частью кортежа - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующий список, содержащий кортеж:

List<Tuple<int, int[]>> someInfo = new List<Tuple<int, int[]>>();

Теперь, учитывая, что мой кортеж заполнен разумными значениями, как я могу извлечь все индексы, соответствующие значениям больше 0 в моем int []?

В качестве примера, скажем, int [] из моего кортежа было инициализировано следующим образом:

int[] values = new int[] { -5, 5, 100, -52, 6 };

Затем список возвращаемых индексов для всех положительных значений (т. Е. 5, 100 и6) в этом конкретном кортеже должно быть: 1, 2 и 4 (индексирование на основе 0).
Затем нам нужно сделать это для всех кортежей из списка «someInfo».
Результат может быть извлечен вСписок int [].

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

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

List<Tuple<int, int[]>> someInfo = new List<Tuple<int, int[]>>
{
    new Tuple<int, int[]>(1, new[] {0, -1, -2, -3, -4}),
    new Tuple<int, int[]>(1, new[] {-5, 5, 100, -52, 5}),
    new Tuple<int, int[]>(1, new[] {1, 2, 3, 4, 5})
};

List<int[]> positiveValueIndices = someInfo
    .Select(tuple => tuple.Item2
        .Select((value, index) => new {value, index})
        .Where(item => item.value > 0)
        .Select(item => item.index)
        .ToArray())
    .ToList();
0 голосов
/ 10 июля 2019

Чтобы получить индексы для одного массива, вы можете использовать это:

Enumerable.Range(0, values.Length).Where(i => values[i] >= 0)

Чтобы получить индексы для всего списка:

someInfo.Select(tuple => Enumerable.Range(0, tuple.Item2.Length).Where(i => tuple.Item2[i] >= 0).ToArray()).ToList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...