Программирование >>  Программирование с использованием ajax 

1 ... 36 37 38 [ 39 ] 40 41 42 ... 396


Цикл foreach предоставляет доступ ко всем элементам в многомерном массиве, точно так же как и в одномерных массивах:

double[,] hillHeight = {{1, 2, 3, 4}, [2, 3, 4, 5}, {3, 4, 5, 6}};

foreach (double height in hillHeight)

Console.WriteLine( {0} , height);

Порядок, в котором элементы выводятся, совпадает с тем, что использовался для присваивания литеральных значений:

hillHeight[0,0] hillHeight[0,l] hillHeight[0,2] hillHeight[0,3] hillHeight[l,0] hillHeight[l,l] hillHeight[1,2]

Массивы массивов

Многомерные массивы, о которых рассказывалось в предыдущем разделе, считаются прямоугольными, потому что каждая строка имеет одинаковый размер. Например, в последнем рассмотренном случае любой из возможных координат х могла соответствовать координата у от О до 3.

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

Синтаксис для объявления массивов, состоящих из массивов, подразумевает указание в объявлении массива нескольких пар квадратных скобок:

int[][] jaggedlntArray;

К сожалению, инициализация подобных массив не является такой же простой процедурой, как инициализация многомерных массивов. Например, за приведенным выше объявлением ни в коем случае не может следовать такая строка кода:

jaggedlntArray = new int[3][4];

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

jaggedlntArray = {{1, 2, 3}, {1}, {1, 2}};

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

jaggedlntArray = new int[2][]; jaggedlntArray[0] = new int[3]; jaggedlntArray[1] = new int[4];

Второй вариант - использовать модифицированную версию приводившейся выше операции литерального присваивания:

jaggedlntArray = new int[3] [] {new int[] {1, 2, 3}, new int[] {1},

new int[] {1, 2}};



2, 4}

2, 3,

2, 4,

3, 9}

2, 5,

10}};

Выполнение следующего кода завершится ошибкой:

foreach (int divisor in divisorslTolO) {

Console.WriteLine(divisor);

Объясняется это тем, что массив divisorslTolO содержит элементы int [ ], а не int. Поэтому вместо этого в цикле нужно проходить по каждому подмассиву, а также по самому массиву:

foreach (int[] divisorsOfInt in divisorslTolO) {

foreach(int divisor in divisorsOfInt) {

Console.WriteLine(divisor);

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

Манипулирование строками

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

Для начала обратим внимание на то, что переменная типа string может восприниматься как доступный только для чтения массив переменных char. Это означает, что доступ к отдельным символам можно получать с использованием приблизительно такого синтаксиса:

Инициализировать массив можно и в той же строке, в которой он объявляется:

int[] [] jaggedlntArray = (new int [] {1, 2, 3}, new int [ ] {!}, new int [] {1, 2}};

С зубчатыми массивами можно использовать циклы f oreach, но их часто нужно делать вложенными для того, чтобы они добирались до фактических данных. Например, предположим, что имеется показанный ниже зубчатый массив, содержащий 10 других массивов, каждый из которых, в свою очередь, тоже содержит массив целых чисел, представляющих собой делители целого числа в диапазоне от 1 до 10:

int[] [] divisorslTolO =



string myString = А string ; char myChar = myString [1];

Однако присваивать отдельные символы подобным образом нельзя. Для получения массива char, пригодного для выполнения записи, можно применять показанный ниже код. В этом коде задействована такая команда переменной массива, как

ToCharArray О:

string myString = А string ;

char[] myChars = myString.ToCharArray ();

После этого массивом char можно начинать манипулировать обычным образом. Также еще можно использовать строки в циклах foreach, как показано ниже:

foreach (char character in myString) {

Console.WriteLine( {0} , character);

Как и в случае массивов, получать информацию о количестве элементов в строке также можно с помощью myString. Length:

string myString = Console.ReadLine ();

Console.WriteLine ( You typed {0} characters. , myString.Length);

Другие базовые приемы манипулирования строками подразумевают использование команд в формате, подобном <строка>. ToCharArray (). К числу наиболее простых, но полезных из них относятся команды <строка>. ToLower () и <строка>. ToUpper (). Эти две команды позволяют преобразовывать строки, соответственно, в нижний и в верхний регистр. Чтобы понять, что в этом полезного, давайте предположим, что требуется обеспечить выполнение проверки на предмет наличия конкретного ответа от пользователя, например, строки yes. Преобразование вводимой пользователем строки в нижний регистр позволит также выполнять проверку на предмет наличия и таких строк, как YES, Yes, yeS и т.д. - подобный пример уже приводился в предыдущей главе.

string userResponse = Console.ReadLine ();

if (userResponse.ToLower0 == yes )

Выполнение действия в ответ.

Эта команда, подобно прочим командам в настоящем разделе, на самом деле не изменяет ту строку, к которой применяется. Вместо этого комбинирование этой команды со строкой приводит к созданию новой строки, которая может далее либо сравниваться с еще какой-нибудь строкой (как это делается здесь), либо присваиваться другой переменной. В роли этой другой переменной может выступать та же самая переменная, над которой выполняются операции:

userResponse = userResponse.ToLower();

Очень важно запомнить этот момент, поскольку использование просто такой строки кода:

userResponse.ToLower() ;

на самом деле не позволит получить никаких особых результатов.

Существуют и другие вещи, которые можно делать для упрощения интерпретации вводимых пользователем данных. Что если пользователь случайно введет в начале или в конце входных данных лишний пробел? В таком случае приведенный код работать



1 ... 36 37 38 [ 39 ] 40 41 42 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика