Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
.NET 4.x

Как красиво выбрать те элементы, которые НЕ являются буквами, не прибегая к лямбде

26.01.2014, 22:05. Показов 1490. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не так давно я открыл для себя тот факт, что методы linq это не только лямбда выражения, и с тех пор меня очень радуют конструкции вида
C#
1
var letters = new char[] { 'a', '1', 'b', '2', 'c', '3', (char)1 }.Where(char.IsLetter);
но, мне никак в голову не придет, как красиво выбрать те элементы, которые НЕ являются буквами, не прибегая к лямбде?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2014, 22:05
Ответы с готовыми решениями:

В строке удалить символы, которые не являются буквами и цифрами
Дан рядок s. удалить все символы, которые не являются буквами и цифрами и заменить каждую большую букву маленькой.

Вывести на экран количество символов которые не являются буквами
Добрый вечер,нужна ваша помощь. После ввода с клавиатуры произвольной строки определить и вывести на экран кол-во символов которые не...

Удалить из текста все символы, которые не являются буквами
Удалит из текста все символы, которые не являются буквами латинского алфавита или кириллицы

11
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
26.01.2014, 22:44
А чем не нравится?
C#
1
2
3
4
5
var d = new char[] {'a', '1', 'b', '2', 'c', '3', (char) 1};
var list = new List<char>();
   foreach(var item in d)
       if (!char.IsLetter(item))
             list.Add(item);
как вариант
C#
1
2
var d = new char[] {'a', '1', 'b', '2', 'c', '3', (char) 1};
var list = d.Where(item => !char.IsLetter(item)).ToList();
Добавлено через 2 минуты
C#
1
2
var d = new char[] { 'a', '1', 'b', '2', 'c', '3', (char)1 };
var list = (from item in d where !char.IsLetter(item) select item).ToList();
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
26.01.2014, 23:09  [ТС]
Цитата Сообщение от Kill100 Посмотреть сообщение
А чем не нравится?
ну не нравится и все. тут дело интереса

Добавлено через 37 секунд
почти нашел то что нужно
C#
1
2
3
4
static Func<TIn,bool> Not<TIn>(this Func<TIn,bool> func,TIn value)
{
    return a => !func(value);
}
но методы не поддерживают оператор-точку(((
0
 Аватар для Kill100
434 / 299 / 82
Регистрация: 11.12.2010
Сообщений: 1,209
26.01.2014, 23:11
Цитата Сообщение от Kill100 Посмотреть сообщение
var list = (from item in d where !char.IsLetter(item) select item).ToList();
Ну так это же не лямбда а чистый linq. Зачем так
Цитата Сообщение от rattrapper Посмотреть сообщение
static Func<TIn,bool> Not<TIn>(this Func<TIn,bool> func,TIn value)
{
* * return a => !func(value);
}
извращаться
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.01.2014, 23:13
rattrapper, лямбда это и есть функция. Так или иначе, без функции тут никак. Можно только записать эту лямбду где-то и звать её по-имени, как это делается здесь.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.01.2014, 23:14
Цитата Сообщение от rattrapper Посмотреть сообщение
но методы не поддерживают оператор-точку
всмысле?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
26.01.2014, 23:25
Лучший ответ Сообщение было отмечено Psilon как решение

Решение

Цитата Сообщение от rattrapper Посмотреть сообщение
выбрать те элементы, которые НЕ являются буквами
C#
1
2
3
4
5
6
7
8
9
public static class LinqExt
{
    public static IEnumerable<A> WhereNot<A>(this IEnumerable<A> xs, Func<A, bool> f)
    {
        return xs.Where(x => !f(x));
    }
}
//...............
var letters = new char[] { 'a', '1', 'b', '2', 'c', '3', (char)1 }.WhereNot(char.IsLetter);
2
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.01.2014, 23:26
pycture, расширение для LINQ - это за гранью добра и зла...
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
26.01.2014, 23:30  [ТС]
pycture, да вы как настоящий программист, взглянули на ситуацию с другого ракурса.
моё текущее решение далеко не так лаконично
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Predicate<T>
{
    Func<T, bool> val;
    public Func<T, bool> Value { get { return val ?? (t => false); } }
    public Predicate(Func<T, bool> predicate)
    {
        val = predicate;
    }
    public bool Not(T value)
    {
        return !val(value);
    }
}
 
var letters = new char[] { 'a', '1', 'b', '2', 'c', '3', (char)1 }
    .Where(new Predicate<char>(char.IsLetter).Not);
это то, чего я добивался, но похоже, оно того не стоило(
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
26.01.2014, 23:33
Цитата Сообщение от Psilon Посмотреть сообщение
расширение для LINQ - это за гранью добра и зла
. По человечьи хотел.
C#
1
2
3
4
static Func<A,C> Chain<A, B, C>(Func<A, B> f, Func<B, C> g) { return (x) => g(f(x)); }
static Func<bool, bool> Not { get { return (x) => !x; } }
..... 
var letters = new char[] { 'a', '1', 'b', '2', 'c', '3', (char)1 }.Where(Chain(char.IsLetter, Not));
так C# обломался сам типы вывести. Надо самому объявлять
C#
1
var letters = new char[] { 'a', '1', 'b', '2', 'c', '3', (char)1 }.Where(Chain<char, bool, bool>(char.IsLetter, Not));
тьфу....
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.01.2014, 23:34
rattrapper, существует немного извращенная запись, основанная на том, что переменная может именоваться не только с буквы, но и с подчеркивания:
C#
1
var letters = new char[] { 'a', '1', 'b', '2', 'c', '3', (char)1 }.Where(_ => !char.IsLetter(_));
и да, массив символов - это строка, поэтому
C#
1
var letters = ("a1b2c3" + ((char)1)).Where(_ => !char.IsLetter(_));
Добавлено через 59 секунд
В C# 6.0 наконец вывод типов будет получше, и не придется писать
C#
1
Tuple<int,int> tuple = new Tuple<int,int>(1,2);
а достаточно будет
C#
1
var tuple = new Tuple(1,2);
так что может доживем до нормального вывода...
1
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
26.01.2014, 23:43  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
В C# 6.0 наконец вывод типов будет получше
вот это Вы обрадовали!!!
Цитата Сообщение от Psilon Посмотреть сообщение
переменная может именоваться не только с буквы, но и с подчеркивания
лучше уж "n" чем "_", имхо. Во всяком случае я оставляю WhereNot в библиотеке, так как это самое логичное решение столь прихотливого вопроса
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2014, 23:43
Помогаю со студенческими работами здесь

Подсчитать количество символов, которые не являются русскими буквами
12. Дан текст 1) Подсчитать количество символов, которые не являются русскими буквами . 2) Для каждой гласной буквы поменять регистр на...

Подсчитать в строке количество символов, которые не являются ни цифрами, ни буквами
Ребят помогите плиз сделать в визио 2008 (пустой фаил, среда С++) задача звучит так: нужно посчитать колличество символов в строке, которые...

Напечатать только те символы предложения, которые являются латинскими буквами
6. Напишите программу, которая печатает только те символы предложения, которые являются латинскими буквами.

Вывести на экран строку, удалив символы, которые не являются буквами
После ввода с клавиатуры произвольного строки вывести на экран эту строку с отобранными у него символами , которые не являются буквами. На...

В введенной строке определить количество символов, которые не являются ни буквами, ни цифрами
Кто может помочь с реализацией программы на Java? #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;set&gt; #include...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru