Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/132: Рейтинг темы: голосов - 132, средняя оценка - 4.58
2096 / 1261 / 171
Регистрация: 01.02.2009
Сообщений: 2,842
1

Получение индекса элемента массива + linq

20.05.2010, 23:27. Показов 24249. Ответов 18

Author24 — интернет-сервис помощи студентам
Собственно, вопрос в названии темы. Есть некий одномерный массив. Каким образом получить индекс того или иного значения массива с помощью linq?
Пример:
C#
1
int[] mas = {5,4,8,9,7,3,4};
Как получить номер ячейки массива, содержащей, например, цифру 9?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2010, 23:27
Ответы с готовыми решениями:

Вывод индекса элемента массива, код работает некорректно
задается массив от -20 до 20 должен выводить индекс выбранного числа или же сообщение что...

Создать метод поиска индекса максимального элемента массива
Напишите метод который в качестве входных параметров принимает массив целых чисел. Результатом...

Написать рекурсивную функцию для вычисления индекса максимального элемента массива из n элементов
Написать рекурсивную функцию для вычисления индекса максимального элемента массива из n элементов.

(Написать программу с классом для нахождения максимального элемента одномерного массива и его индекса.)
Добрый вечер. помогите пожалуйста разобраться почему в консоли не выводит сразу максимальный...

18
87 / 87 / 26
Регистрация: 04.01.2010
Сообщений: 270
21.05.2010, 00:08 2
C#
1
2
            int[] mas = {5, 4, 8, 9, 7, 3, 4};
            int[] array = mas.Select(p => p).Where(p => p == 9).ToArray();
вот так например
0
Заблокирован
21.05.2010, 00:16 3
Вот нарыл кое-что
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Linq;
using System.Text;
 
public class MainClass
{
    public static void Main()
    {
 
        int[] mas = { 5, 4, 8, 9, 7, 3, 4 };
 
        
        var Ind = mas
            .Select((i, index) => new { index , i });
 
        foreach (var v in Ind)
            Console.WriteLine(v);
        Console.ReadLine();
 
        Console.ReadKey();
    }
}
2
2096 / 1261 / 171
Регистрация: 01.02.2009
Сообщений: 2,842
21.05.2010, 01:17  [ТС] 4
IICuX, в данном случае возвращается само число, а мне необходимо узнать его порядковый номер в массиве.

Добавлено через 47 минут
SSV, спасибо за помощь. Написал пока так:
C#
1
2
bool[] mas = { true, false, false, true};
var Ind = mas.Select((i, index) => new { index, i }).Where((n)=>n.i == true);
Хотя, в идеале, хотелось бы из всего этого получить массив, содержащий только индексы, т.е. массив типа int.
0
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
21.05.2010, 04:25 5
C#
1
2
3
int index = -1;
mas.First(n => { index++; return n == 9; });
Console.WriteLine(index);
1
0 / 0 / 0
Регистрация: 17.04.2018
Сообщений: 13
02.08.2019, 10:57 6
C#
1
2
3
4
5
6
7
8
9
10
11
         List<int> tokamak = new List<int> { 1, 1, 3, 1, 7 };
 
            var elementIndex = tokamak
                              .Select((e, i) => new { e, i })
                              .GroupBy(x => x.e, (k, e) => new
                              {
                                  Element = k,
                                  Index = e.Select(z => z.i)
                                 .ToList()
                              })
                .ToList();
0
Модератор
Эксперт .NET
15464 / 10710 / 2786
Регистрация: 21.04.2018
Сообщений: 31,530
Записей в блоге: 2
02.08.2019, 11:35 7
Цитата Сообщение от kirill29 Посмотреть сообщение
Написал пока так:
.....
Хотя, в идеале, хотелось бы из всего этого получить массив, содержащий только индексы, т.е. массив типа int.
C#
1
2
3
4
5
6
7
        bool[] mas = { true, false, false, true };
        bool find = true;
        int[] Ind = mas
            .Select((i, index) => new { index, i })
            .Where(n => n.i == find)
            .Select(n=>n.index)
            .ToArray();
0
0 / 0 / 0
Регистрация: 17.04.2018
Сообщений: 13
02.08.2019, 12:04 8
C#
1
2
3
4
5
6
7
8
9
10
          List<int> tokamak = new List<int> { 1, 1, 3, 1, 7 };
            var elementIndexCount = tokamak
                                   .Select((e, i) => new { e, i })
                                   .GroupBy(x => x.e, (k, e) => new
                                   {
                                       Element = k,
                                       Index = e.Select(z => z.i).ToList(),
                                       Count = e.Count()
                                   })
                                 .ToList();
0
97 / 98 / 58
Регистрация: 29.09.2016
Сообщений: 410
02.08.2019, 13:13 9
C#
1
2
3
4
       int j = 0;
       var result = arr.Select(l => new { Num = l, Ind = j++ })
                       .Where(n => n.Num == 9)
                       .First().Ind;
0
Модератор
Эксперт .NET
15464 / 10710 / 2786
Регистрация: 21.04.2018
Сообщений: 31,530
Записей в блоге: 2
02.08.2019, 13:15 10
ahtik95, по задаче массив, содержащий только индексы, а не индекс первого
0
97 / 98 / 58
Регистрация: 29.09.2016
Сообщений: 410
02.08.2019, 13:17 11
Цитата Сообщение от Элд Хасп Посмотреть сообщение
по задаче массив, содержащий только индексы, а не индекс первого
C#
1
2
3
4
5
int j = 0;
            var result = arr.Select(l => new { Num = l, Ind = j++ })
                            .Where(n => n.Num == 9)
                            .Select(c => c.Ind)
                            .ToArray();
0
Модератор
Эксперт .NET
15464 / 10710 / 2786
Регистрация: 21.04.2018
Сообщений: 31,530
Записей в блоге: 2
02.08.2019, 13:21 12
ahtik95, и чем это отличается от кода в пост #7?
0
97 / 98 / 58
Регистрация: 29.09.2016
Сообщений: 410
02.08.2019, 13:21 13
Цитата Сообщение от Элд Хасп Посмотреть сообщение
по задаче массив, содержащий только индексы
не совсем это очевидно ,если прочитать условие.
Цитата Сообщение от kirill29 Посмотреть сообщение
Есть некий одномерный массив. Каким образом получить индекс того или иного значения массива с помощью linq?
0
Модератор
Эксперт .NET
15464 / 10710 / 2786
Регистрация: 21.04.2018
Сообщений: 31,530
Записей в блоге: 2
02.08.2019, 13:25 14
И изменение из анонимного внутреннего метода внешней переменной (тем более когда в этом нет явной необходимости) - плохой приём.

Добавлено через 57 секунд
Цитата Сообщение от ahtik95 Посмотреть сообщение
не совсем это очевидно ,если прочитать условие.
ТС уточнял задачу в пост #4 - последняя строка.

Добавлено через 44 секунды
Цитата Сообщение от kirill29 Посмотреть сообщение
в идеале, хотелось бы из всего этого получить массив, содержащий только индексы, т.е. массив типа int.
0
97 / 98 / 58
Регистрация: 29.09.2016
Сообщений: 410
02.08.2019, 13:27 15
Цитата Сообщение от Элд Хасп Посмотреть сообщение
(тем более когда в этом нет явной необходимости) - плохой приём.
Можете привести примеры плохих последствий плохого приема?)

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
ТС уточнял задачу в пост #4 - последняя строка.

Не по теме:

мой косяк, не удосужился прочитать уточнения .

0
Модератор
Эксперт .NET
15464 / 10710 / 2786
Регистрация: 21.04.2018
Сообщений: 31,530
Записей в блоге: 2
02.08.2019, 13:28 16
Цитата Сообщение от ahtik95 Посмотреть сообщение
Можете привести примеры плохих последствий плохого приема?)
Возможно сделать и надо сделать - это разные вещи.
Как минимум это ухудшает читаемость кода.
C# - это очень выраженный язык ООП, поэтому, в том числе, надо соблюдать правила SOLID.
0
97 / 98 / 58
Регистрация: 29.09.2016
Сообщений: 410
02.08.2019, 14:10 17
Цитата Сообщение от Элд Хасп Посмотреть сообщение
в том числе, надо соблюдать правила SOLID.
А какой тут принцип SOLID нарушен? Самый приближенный по смыслу " Single responsibility" ,но там про объекты, где каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс. Все его сервисы должны быть направлены исключительно на обеспечение этой обязанности.
0
Модератор
Эксперт .NET
15464 / 10710 / 2786
Регистрация: 21.04.2018
Сообщений: 31,530
Записей в блоге: 2
02.08.2019, 18:25 18
Цитата Сообщение от ahtik95 Посмотреть сообщение
А какой тут принцип SOLID нарушен?
На мой взгляд Принцип инверсии зависимостей.
Переменная int j это переменная уровня метода класса.
А её изменение происходит из анонимного метода создаваемого при вызове метода для другой переменной.
То есть метод который меняет переменную int j находится на два уровня глубже этой переменной.

Опять таки, я не говорю, что это ЗАПРЕЩЕНО, но когда есть возможность обойтись иными не противоречащими способами, то лучше выбрать их.

Второй нюанс, хотя в настоящее время в Net ваша реализация и будет работать, но вы нигде не найдёте в документации, что такое ОБЯЗАНО работать. То есть нет нигде, что члены последовательности будут обязательно обрабатывается в порядке их индексов. И нет ни каких гарантий того, что в какой-то версии Net это не изменится.
То есть даже если есть какая-то недокументированная функция работающая правильно как и задумывалось, то если есть выбор лучше вместо неё использовать документированную функцию.
0
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
04.08.2019, 00:20 19
вариация на тему
C#
1
2
3
4
5
6
            int[] mas = { 5, 4, 8, 9, 7, 3, 4,9 };
            var look = mas.Select((x, i) => new { num = x, ind = i }).ToLookup(x => x.num, x => x.ind);
            foreach (var item in look[9])
            {
                Console.WriteLine(item);
            }
0
04.08.2019, 00:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2019, 00:20
Помогаю со студенческими работами здесь

Получение индекса элемента массива, в котором произошло событие
Собственно сабж. Пишу игру &quot;сапёр&quot;. Поле сапёра - массив кнопок MineButton, которые созданы на базе...

Treeview получение индекса выделенного элемента
Имеется такое дерево, мне необходимо, допустим, выбрать из контента все сумки, 1ый узел. Для этого...

Получение индекса последнего добавленного в базу элемента.
Сабж. Как это сделать? Использую ADODB. Это сохраняется в параметрах? Как это достать? База...

Составить программу поиска наибольшего по модулю элемента массива, а также индекса этого элемента
Помогите написать программу и составить блок схему. Дано массив А и натуральное число n. Составить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru