C# 4.0 полное руководство - 2011
Шрифт:
Console.WriteLine("\n");
Console.WriteLine("Добавить еще 20 элементов");
// Добавить количество элементов, достаточное для // принудительного расширения массива, for (int i=0; i < 20; i++) al.Add((char)('a' + i));
Console.WriteLine("Текущая емкость: " + al.Capacity);
Console.WriteLine("Количество элементов после добавления 20 новых: " + al.Count);
Console.Write("Содержимое: "); foreach(char с in al)
Console.Write(с + " ");
Console.WriteLine("\n");
//
// используя индексирование массива.
Console.WriteLine("Изменить три первых элемента"); al [0] = 1X1 ; al[1] = 'Y'; al[2] = 'Z';
Console.Write("Содержимое: "); foreach(char с in al)
Console.Write (c + " ");
Console.WriteLine ;
Вот к какому результату приводит выполнение этой программы.
Исходное количество элементов: О
Добавить 6 элементов Количество элементов: 6 Текущее содержимое: С А Е В D F
Удалить 2 элемента Количество элементов: 4 Содержимое: С Е В D
Добавить еще 20 элементов Текущая емкость: 32
Количество элементов после добавления 20 новых: 24 Содержимое: CEBDabcdefghij klmnopqrst
Изменить три первых элемента
Содержимое: XYZDabcdefghij klmnopqrst
Сортировка и поиск в коллекции типа ArrayList
Коллекцию типа ArrayList можно отсортировать с помощью метода Sort . В этом случае поиск в отсортированной коллекции с помощью метода BinarySearch становится еще более эффективным. Применение обоих методов демонстрируется в приведенном ниже примере программы.
// Отсортировать коллекцию типа ArrayList и осуществить в ней поиск.
using System;
using System.Collections;
class SortSearchDemo { static void Main {
// Создать коллекцию в виде динамического массива.
ArrayList al = new ArrayList;
// Добавить элементы в динамический массив.
al.Add(55);
al.Add(43) ;
al.Add(-4);
al.Add(88);
al.Add(3);
al.Add(19) ;
Console.Write("Исходное содержимое: "); foreach(int i in al)
Console.Write (i + " ");
Console.WriteLine ("\n");
// Отсортировать динамический массив, al.Sort;
// Отобразить содержимое динамического массива, используя цикл foreach.
Console..Write ("Содержимое после сортировки: ") ; foreach (int i in al)
Console.Write (i + " ");
Console.WriteLine ("\n");
Console.WriteLine("Индекс элемента 43: " + al.BinarySearch (43));
}
}
Ниже
Исходное содержимое: 55 43 -488 3 19
Содержимое после сортировки: -4 3 19 43 55 88
Индекс элемента 43: 3
В одной и той же коллекции типа ArrayList могут храниться объекты любого типа. Тем не менее во время сортировки и поиска в ней эти объекты приходится сравнивать. Так, если бы список объектов в приведенном выше примере программы содержал символьную строку, то их сравнение привело бы к исключительной ситуации. Впрочем, для сравнения символьных строк и целых чисел можно создать специальные методы. О таких методах сравнения речь пойдет далее в этой главе.
Получение массива из коллекции типа ArrayList
В работе с коллекцией типа ArrayList иногда требуется получить из ее содержимого обычный массив. Этой цели служит метод ТоАггау . Для преобразования коллекции в массив имеется несколько причин. Две из них таковы: потребность в ускорении обработки при выполнении некоторых операций и необходимость передавать массив методу, который не перегружается, чтобы принять коллекцию. Но независимо от конкретной причины коллекция типа ArrayList преобразуется в обычный^лассив довольно просто, как показано в приведенном ниже примере программы.
// Преобразовать коллекцию типа ArrayList в обычный массив.
using System;
using System.Collections;
class ArrayListToArray { static void Main {
ArrayList al = new ArrayList;
// Добавить элементы в динамический массив, al.Add(1); al.Add(2); al.Add(3) ; al.Add(4) ;
Console.Write("Содержимое: "); foreach(int i in al)
Console.Write(i + " ");
Console.WriteLine;
int[] ia = (int[]) al.ToArray(typeof(int)); int sum = 0;
// Просуммировать элементы массива, for(int i=0; icia.Length; i++) sum += ia[i];
Console.WriteLine("Сумма равна: " + sum);
}
}
Эта программа дает следующий результат.
Содержимое: 1 2 3 4 Сумма равна: 10
В начале этой программы создается коллекция целых чисел. Затем в ней вызывается метод ToArray с указанием типа int получаемого массива. В итоге создается целочисленный массив. Но поскольку Array является типом, возвращаемым методом ToArray , то содержимое получаемого в итоге массива должно быть приведено к типу int [ ]. (Напомним, что Array является базовым типом для всех массивов в С#.) И наконец, значения всех элементов массива суммируются.