using System; using System.Linq;

class GroupDemo {

static void Main() {

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

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

};

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

// группируемых по имени домена самого верхнего уровня.

var webAddrs = from addr in websites

where addr.LastlndexOf('.')    != -1

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

// Выполнить запрос и вывести его результаты, foreach(var sites in webAddrs) {

Console.WriteLine("Веб-сайты, сгруппированные " +

"по имени домена" + sites.Key); foreach(var site in sites)

Console.WriteLine ("    " + site);

Console.WriteLine();

}

}

}

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

Веб-сайты, сгруппированные по имени домена .сот

hsNameA.сот hsNameD.сот

Веб-сайты, сгруппированные по имени домена .net hsNameB.net hsNameC.net

hsNameH.net    *

Веб-сайты, сгруппированные по имени домена .org hsNameE.org hsNameF.org

Веб-сайты, сгруппированные по имени домена .tv hsNameG.tv hsNamel.tv

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

var webAddrs = from addr in websites

where addr.LastlndexOf('.')    !=    -1

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

Ключ в этом операторе создается с помощью методовLastlndexOf() иSubstring (), определенных для данных типаstring.(Эти методы упоминаются в главе 7, посвященной массивам и строкам. Вариант методаSubstring (), используемый в данном примере, возвращает подстроку, начинающуюся с места, обозначаемого индексом, и продолжающуюся до конца вызывающей строки.) Индекс последней точки в адресе веб-сайта определяется с помощью методаLastlndexOf().По этому индексу в методеSubstring() создается оставшаяся часть строки, в которой содержится имя домена самого верхнего уровня. Обратите внимание на то, что в оператореwhereотсеиваются все строки, которые не содержат точку. МетодLastlndexOf() возвращает -1, если указанная подстрока не содержится в вызывающей строке.

Перейти на страницу:

Похожие книги