Использование методов массива в C#
Пример
Для простоты в этом примере используются массивы символов для демонстрации методов Array, но эти методы работают с любым типом массива. Вы можете выполнять некоторые из этих операций над символами более легко, если рассматривать их как строки, но в этом примере показано, как работают методы Array.
Для простоты в этом примере используются массивы символов для демонстрации методов Array, но эти методы работают с любым типом массива. Вы можете выполнять некоторые из этих операций над символами более легко, если рассматривать их как строки, но в этом примере показано, как работают методы Array.
...
private void btnGo_Click(object sender, EventArgs e) { // Очистить любое предыдущее форматирование. rchItems.Select(0, rchItems.Text.Length); rchItems.SelectionColor = Color.Black; rchItems.SelectionBackColor = Color.White; // Array.Reverse. char[] items = rchItems.Text.ToCharArray(); Array.Reverse(items); txtReverse.Text = new string(items); // Array.Sort. items = rchItems.Text.ToCharArray(); Array.Sort(items); txtSort.Text = new string(items); // Array.IndexOf. char test_char = txtTestChar.Text[0]; items = rchItems.Text.ToCharArray(); int index_of = Array.IndexOf(items, test_char); txtIndexOf.Text = index_of.ToString(); if (index_of >= 0) { rchItems.Select(index_of, 1); rchItems.SelectionColor = Color.Red; } // Array.LastIndexOf. int last_index_of = Array.LastIndexOf(items, test_char); txtLastIndexOf.Text = last_index_of.ToString(); if (last_index_of >= 0) { rchItems.Select(last_index_of, 1); rchItems.SelectionBackColor = Color.LightBlue; } rchItems.Select(0, 0); // Копировать равные. char[] copy = new char[items.Length]; Array.Copy(items, copy, items.Length); txtCopyEquals.Text = Array.Equals(items, copy).ToString(); // Клоны равны. char[] clone = (char[])items.Clone(); txtCloneEquals.Text = Array.Equals(items, clone).ToString(); // Два массива, установленные для указания того же места в памяти. char[] reference = items; txtRefEquals.Text = Array.Equals(items, reference).ToString(); // Array.Resize. int initial_length = items.Length; Array.Resize(ref items, 2 * initial_length); Array.Copy(items, 0, items, initial_length, initial_length); rchLarger.Text = new string(items); // Array.Resize. Array.Resize(ref items, initial_length / 2); rchSmaller.Text = new string(items); }
Сначала код удаляет любое форматирование из элементов RichTextBox, если вы нажали кнопку «Перейти».
Первый метод Array, который демонстрирует код: Reverse. Код получает введенный текст, преобразует его в массив char и сохраняет его в массиве items. Затем он вызывает Array.Reverse, чтобы отменить элементы в массиве. Обратите внимание, что этот метод и многие другие методы Array не возвращают значение. Вместо этого эти методы выполняют свои операции над самим массивом. Это означает, что если вы хотите сохранить исходный массив, вы должны скопировать его, прежде чем вы вызываете Reverse или другие методы. В этом примере восстанавливается массив элементов по мере необходимости, читая его из элементов RichTextBox.
После вызова Array.Reverse, код использует обратный массив для инициализации новой строки и отображения ее. Результатом является исходная строка со своими буквами, расположенными назад.
Далее код использует метод Array.Sort для сортировки символов в массиве items. Затем он отображает результат.
Затем код использует метод Array.IndexOf, чтобы найти тестовый символ в массиве items. Это относительно просто, и вы, вероятно, использовали IndexOf со строками. Это точно так же, кроме Array.IndexOf может найти любой элемент в массиве. Например, если у вас есть массив объектов Person, он может найти определенный объект. Обратите внимание: объекты должны быть те же Person объекты, а не два разных объекта, которые имеют одинаковые значения свойств. В методе Array.IndexOf используется ссылочное равенство, а не равенство значений.
После того, как он находит индекс целевого символа, код отображает его позицию и выделяет символ в исходной строке красным цветом.
Аналогично, код использует Array.LastIndexOf, чтобы найти последний экземпляр символа, отображает его местоположение и выделяет его синим фоном.
Далее код демонстрирует метод Array.Equals три раза. Сначала он использует Array.Copy, чтобы сделать копию массива, а затем использует Array.Equals, чтобы увидеть, совпадают ли эти два. Хотя оба массива содержат одни и те же элементы, они не равны (как вы можете видеть на картинке). (Один из способов понять это - спросить себя, что произойдет, если вы установите первую запись в одном массиве на X. Запись в этом массиве изменится, но запись в другом массиве не будет.)
Код повторяет этот тест с клонированной версией массива. Снова два массива сохраняют одни и те же элементы, но они не являются одинаковыми массивами, поэтому Array.Equals возвращает false.
Затем программа создает новую переменную с именем reference для ссылки на массив char и устанавливает его равным массиву items. Теперь оба reference и items относятся к одному и тому же массиву, поэтому Array.Equals возвращает true. (Теперь, если вы установили reference [0] в X, items [0] также становится X, потому что это два имени для одного и того же массива.)
Программа заканчивается путем изменения размера массива items дважды. Сначала он удваивает длину массива, а затем использует Array.Copy, чтобы скопировать первую половину вновь измененного массива (где исходные элементы) во вторую половину. Затем он отображает значения большего массива.
Затем код изменяет размер массива таким образом, что он имеет половину его первоначального размера и отображает его содержимое.