Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 22

Возврат единственной строки из множества одинаковых LINQ

11.09.2020, 11:00. Показов 1469. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем,в задаче даны список строк и список интов, требуется найти строки,которые начинаются с цифры и имеют длину n(число из списка numbers),если есть несколько подходящих под критерии возвращать только первую,если нет подходящих выводить сообщение об ошибке .К примеру, в списке интов {3,4,1,9},а в списке строк {"3qwe","4qrw","1wetr","8"} и надо чтобы метод возвращал {"3qwe","1wetr","8","not found"},никак не могу придумать условие для отбора первых строк заданной длины,заранее спасибо за помощь
C#
1
2
3
4
5
6
7
8
9
10
11
    public static IEnumerable<string> FindStr(IEnumerable<int> numbers, IEnumerable<string> stringList)
        {
 
            var query =  from int number in numbers
                         from string str in stringList
                         where str.Length == number && Char.IsDigit(str.First())
                         
                         select str??"not found";
 
            return query;
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.09.2020, 11:00
Ответы с готовыми решениями:

Сложить два числа из единственной строки
Задание: Во входном потоке в единственной строке через пробел записаны два целых числа. В выходной поток следует записать единственное...

IEnumerable, foreach, LINQ, отложенное выполнение, передача параметров и возврат результата
Всем доброго времени суток) Недавно осознал, что я не так уж хорошо знаю вещи которые использую довольно часто. А именно, это...

Linq или не Linq. Linq медленней стандартных методов?
Есть у нас два массива, нужно найти совпадения в первом из второго. Два варианта реализации, первый костылем, второй с linq, но скорость...

10
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
11.09.2020, 13:27
socialanxiety20,
C#
1
2
3
4
5
6
7
8
9
10
public IEnumerable<string> FindStr(IEnumerable<int> ListNumbers, IEnumerable<string> ListStrings)
{
 
    var query = from int numb in ListNumbers
                join str in ListStrings on numb equals Convert.ToInt32(str.First().ToString()) into ps
                from p in ps.DefaultIfEmpty()
                select p ?? "not found";
 
    return query;
}
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
11.09.2020, 13:32
socialanxiety20, если
Цитата Сообщение от socialanxiety20 Посмотреть сообщение
которые начинаются с цифры и имеют длину n(число из списка numbers)
то пример
Цитата Сообщение от socialanxiety20 Посмотреть сообщение
К примеру, в списке интов {3,4,1,9},а в списке строк {"3qwe","4qrw","1wetr","8"} и надо чтобы метод возвращал {"3qwe","1wetr","8","not found"}
не верный, проверь и напиши либо верное условие, либо верный пример
0
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 22
11.09.2020, 13:45  [ТС]
Да,накосячил с примером,извиняюсь, там должно было бы быть так список интов(размеры строк) {3,4,1,9}, список строк {"3qe","4rw","1wetr","8"} и собственно список,который возвращается {"3qe","1wetr","8","not found"}
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
11.09.2020, 14:08
Цитата Сообщение от socialanxiety20 Посмотреть сообщение
никак не могу придумать условие для отбора первых строк заданной длины,заранее спасибо за помощь
Так как проход по коллекции строк требуется много кратно, я бы сначала их оптимизировал преобразовав в словарь.

Пример реализации:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        public static IEnumerable<string> FindStr(IEnumerable<int> numbers, IEnumerable<string> stringList)
        {
            Dictionary<int, string> strings = new Dictionary<int, string>();
            foreach (string item in stringList)
            {
                if (item != null && item.Length > 0 && char.IsDigit(item[0]))
                {
                    if (!strings.ContainsKey(item.Length))
                        strings.Add(item.Length, item);
                }
            }
 
            foreach (int item in numbers)
            {
                if (strings.TryGetValue(item, out string str))
                    yield return str;
                else
                    yield return "not found";
 
            }
        }
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
11.09.2020, 14:13
Элд Хасп, Данный пример не работает.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
11.09.2020, 14:19
Лучший ответ Сообщение было отмечено socialanxiety20 как решение

Решение

Цитата Сообщение от socialanxiety20 Посмотреть сообщение
LINQ
Если решение принципиально надо получить используя LINQ, то такой вариант:
C#
1
2
3
4
5
6
7
        public static IEnumerable<string> FindStr(IEnumerable<int> numbers, IEnumerable<string> stringList)
            => numbers
                .Select(num => stringList
                            .Where(str => !string.IsNullOrEmpty(str) && char.IsDigit(str[0]))
                            .FirstOrDefault(str => str.Length == num)
                            ?? "not found"
            );
Но он будет работать заметно медленнее предыдущего.

Добавлено через 55 секунд
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Данный пример не работает.
Не отлаживал.
Туго со временем.
Сейчас посмотрю.
1
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
11.09.2020, 14:23
Элд Хасп, Этот тоже.
Миниатюры
Возврат единственной строки из множества одинаковых LINQ  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
11.09.2020, 14:33
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Данный пример не работает
Вроде работает.
C#
1
var aaaa = FindStr(new int[] { 3, 4, 1, 9 }, new string[] { "3qe", "4rw", "1wetr", "8" }).ToArray();
Возвращает "3qe","not found","8","not found".

Если изменить входной набор { "3qe", "4rw", "1wet", "8" } вернёт "3qe","1wet","8","not found".

Добавлено через 3 минуты
Цитата Сообщение от Kazbek17 Посмотреть сообщение
Этот тоже.
Последнее слово имеет длину 10, а не 9.
Уберите одну букву и всё заработает.
1
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
11.09.2020, 14:34
Элд Хасп, Пардон
0
0 / 0 / 0
Регистрация: 09.10.2016
Сообщений: 22
11.09.2020, 14:55  [ТС]
Все работает,спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2020, 14:55
Помогаю со студенческими работами здесь

Возврат каретки и перевод строки в приглашении Командной строки
В строке приглашения MS-DOS после вывода всей информации перейти на новую строчку. как это сделать?

Передача строки в функцию и возврат строки как результата
Короче товарищи замучился я со строками в си, поскольку перешел из delphi там с этим проблем нет. И меня собственно интересует такая штука...

Выборка со сравнением из множества одинаковых по структуре таблиц
Добрый день! Существует n количество одинаковых по структуре таблиц Какова концепция сравнения определенного поля Скажу, 2 таблицы...

Макрос ВПР с перебором множества одинаковых файлов
Добрый день! Очень нужна помощь! Задача следующая: Есть файл-шаблон со столбиками &quot;ИНН&quot;, &quot;ЗНАЧЕНИЕ&quot; и много-много...

Загрузка множества одинаковых picture box одной кнопкой
Проблема вот в чем, у меня есть основной picture box на котором размещено еще 6, каждый привязан к своей кнопке, при нажатии на кнопку он...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru