Чтение онлайн

на главную - закладки

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

// Использовать оператор into вместе с оператором group.

using System; using System.Linq;

class IntoDemo {

static void Main {

string[] websites = { "hsNameA.com", "hsNameB.net", "hsNameC.net", "hsNameD.com", "hsNameE.org", "hsNameF.org",

"hsNameG.tv", "hsNameH.net", "hsNamel.tv"

};

// Сформировать запрос на получение списка веб-сайтов, группируемых //по имени домена самого верхнего уровня, но выбрать только те // группы, которые состоят более чем из двух членов.

// Здесь ws —

это переменная диапазона для ряда групп,

// возвращаемых при выполнении первой половины запроса, var webAddrs = from addr in websites

where addr.LastlndexOf(1.1) != -1

group addr by addr.Substring(addr.LastlndexOf('.'))

into ws where ws.Count > 2 select ws;

// Выполнить запрос и вывести его результаты.

Console.WriteLine("Домены самого верхнего уровня " +

"с более чем двумя членами.\п");

foreach(var sites in webAddrs) {

Console.WriteLine("Содержимое домена: " + sites.Key); foreach(var site in sites)

Console.WriteLine (" " + site);

Console.WriteLine;

}

}

}

Эта программа дает следующий результат:

Домены самого верхнего уровня с более чем двумя членами.

Содержимое домена: .net hsNameB.net hsNameC.net hsNameH.net

Как следует из результата выполнения приведенной выше программы, по запросу возвращается только группа .net, поскольку это единственная группа, содержащая больше двух элементов.

Обратите особое внимание в данном примере программы на следующую последовательность операторов в формируемом запросе.

group addr by addr.Substring(addr.LastlndexOf('.'))

into ws where ws.Count > 2 select ws;

Сначала результаты выполнения оператора group сохраняются как временные для последующей обработки оператором where. В качестве переменной диапазона в данный момент служит переменная ws. Она охватывает все группы, возвращаемые оператором group. Затем результаты запроса отбираются в операторе where с таким расчетом, чтобы в конечном итоге остались только те группы, которые содержат больше двух членов. Для этой цели вызывается метод Count , который является методом расширения и реализуется для всех объектов типа I Enumerable. Он возвращает количество элементов в последовательности. (Подробнее о методах расширения речь пойдет далее в этой главе.) А получающаяся в итоге последовательность групп возвращается оператором select.

Применение оператора let для создания временной переменной в запросе

Иногда возникает потребность временно сохранить некоторое значение в самом запросе. Допустим, что требуется создать переменную перечислимого типа, которую можно будет затем запросить, или же сохранить некоторое значение, чтобы в дальнейшем использовать его в операторе where. Независимо от преследуемой цели, эти виды функций могут

быть осуществлены с помощью оператора
let. Ниже приведена общая форма оператора let:

let имя = выражение

где имя обозначает идентификатор, получающий значение, которое дает выражение. Тип имени выводится из типа выражения.

В приведенном ниже примере программы демонстрируется применение оператора let для создания еще одного перечислимого источника данных. В качестве входных данных в запрос вводится массив символьных строк, которые затем преобразуются в массивы типа char. Для этой цели служит еще один метод обработки строк, называемый ToCharArray и возвращающий массив, содержащий символы в строке. Полученный результат присваивается переменной chrArray, которая затем используется во вложенном операторе from для извлечения отдельных символов из массива. И наконец, полученные символы сортируются в запросе, и из них формируется результирующая последовательность.

// Использовать оператор let в месте с вложенным оператором from.

using System; using System.Linq;

class LetDemo {

static void Main {

string[] strs = { "alpha", "beta", "gamma" };

// Сформировать запрос на получение символов, возвращаемых из // строк в отсортированной последовательности. Обратите внимание // на применение вложенного оператора from, var chrs = from str in strs

let chrArray = str.ToCharArray

from ch in chrArray orderby ch select ch;

Console.WriteLine("Отдельные символы, отсортированные по порядку:");

// Выполнить запрос и вывести его результаты, foreach(char с in chrs) Console.Write(с + " ");

Console.WriteLine;

}

}

Вот к какому результату приводит выполнение этой программы.

Отдельные символы, отсортированные по порядку: aaaaabeghlmmpt

Обратите внимание в данном примере программы на то, что в операторе let переменной chrArray присваивается ссылка на массив, возвращаемый методом str.

ToCharArray.

let chrArray = str.ToCharArray

После оператора let переменная chrArray может использоваться в остальных операторах, составляющих запрос. А поскольку все массивы в C# преобразуются в тип IEnumerable<T>, то переменную chrArray можно использовать в качестве источника данных для запроса во втором, вложенном операторе from. Именно это и происходит в рассматриваемом здесь примере, где вложенный оператор from служит для перечисления в массиве отдельных символов, которые затем сортируются по нарастающей и возвращаются в виде конечного результата.

Поделиться:
Популярные книги

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Город Богов

Парсиев Дмитрий
1. Профсоюз водителей грузовых драконов
Фантастика:
юмористическая фантастика
детективная фантастика
попаданцы
5.00
рейтинг книги
Город Богов

Звездная Кровь. Изгой II

Елисеев Алексей Станиславович
2. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
технофэнтези
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой II

Измена. Жизнь заново

Верди Алиса
1. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Жизнь заново

Адвокат Империи 7

Карелин Сергей Витальевич
7. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 7

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Идеальный мир для Лекаря 18

Сапфир Олег
18. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 18

Двойник Короля 5

Скабер Артемий
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Двойник Короля 5

Неудержимый. Книга XVII

Боярский Андрей
17. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVII

Прометей: каменный век

Рави Ивар
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Прометей: каменный век

Барин-Шабарин

Гуров Валерий Александрович
1. Барин-Шабарин
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Барин-Шабарин

Развод с миллиардером

Вильде Арина
1. Золушка и миллиардер
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Развод с миллиардером

Курсант. На Берлин

Барчук Павел
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант. На Берлин

Мастеровой

Дроздов Анатолий Федорович
Фантастика:
фэнтези
боевая фантастика
альтернативная история
7.40
рейтинг книги
Мастеровой