Суббота, 23.11.2024, 02:25
Приветствую Вас Гость | RSS
Меню сайта
Категории раздела
База языка C# [3]
В данном разделе будут статьи по базовым понятиям языка C#
Основы языка С# [22]
Раздел продолжает рассматривать основы языка C#
Задачи [2]
примеры решения задач
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Поиск
Главная » Статьи » C# » Основы языка С#

Массивы. Одномерные. Часть 2

Продолжаем рассматривать массивы. Начало смотрите в первой части.

Массив как объект
Мы уже говорили о том, что массивы в С# реализованы как объекты. Если говорить более точно, то они реализованы на основе базового класса Array, определенного в пространстве имен System. Данный класс содержит различные свойства и методы. Например, свойство Length позволяет определять количество элементов в массиве. Используя данное свойство, внесем изменения в метод Change:

static void Change(int[] a)

{

    for (int i = 0; i < a.Length; i++)

    {

        if (a[i] > 0)

        {

            a[i] = 0;

        }

    }

}

Таким образом, информация о длине массива передается в метод Change неявным образом вместе с массивом, и мы избавились от необходимости вводить дополнительную переменную для хранения размерности массива.
Наиболее важные члены класса Array приведены в следующей таблице:

Элемент Вид Описание
BinarySearch статический метод Осуществляет двоичный поиск в отсортированном массиве.
Clear статический метод Присваивает элементам массива значения, определенные по умолчанию, т.е для арифметических типов нули, для ссылочных типов null.
Copy статический метод Копирует элементы одного массива в другой массив.
CopyTo экземплярный метод Копирует все элементы текущего одномерного массива в другой массив.
IndexOf статический метод Осуществляет поиск первого вхождения элемента в одномерный массив. Если элемент найден, то возвращает его индекс, иначе возвращает значение -1.
LastIndexOf статический метод Осуществляет поиск последнего вхождения элемента в одномерный массив. Если элемент найден, то возвращает его индекс, иначе возвращает значение -1.
Length свойство Возвращает количество элементов в массиве
Rank свойство Возвращает число размерностей массива. Для одномерного массива Rank возвращает 1, для двумерного – 2 и т.д.
Reverse статический метод Изменяет порядок следования элементов в массиве на обратный.
Sort статический метод Упорядочивает элементы одномерного массива.

Замечание. Обратите внимание на то, что для перечисленных членов класса Array не указываются параметры. Это связано с тем, что большинство из них имеют несколько перегруженных версий, поэтому при их использовании следует обращать внимание на подсказки VS и пользоваться справочной информацией.
Вызов статических методов происходит через обращение к имени класса, например, Array.Sort(myArray). В данном случае мы обращаемся к статическому методу Sort класса Array и передаем данному методу в качестве параметра объект myArray - экземпляр класса Array.
Обращение к свойству или вызов экземплярного метода производится через обращение к экземпляру класса, например, myArray.Length или myArray.GetValue(i).
Пример:

class Program

{

    static void Print(int[] a)

    {

        foreach (int elem in a)

        {

            Console.Write("{0} ", elem);

        }

        Console.WriteLine();

    }

    static void Main()

    {

        int[] one = { 2, 4, 6, 1, -5, 2, 9, -2 };

        Console.Write("Первый массив:");

        Print(one);

        Console.WriteLine("Первый раз значение 2 встречается в нем в позиции {0}",

        Array.IndexOf(one, 2));

        Console.WriteLine("Последний раз значение 2 встречается в нем в позиции {0}",

        Array.LastIndexOf(one, 2));

        Array.Sort(one);

        Console.Write("отсортирован по возрастанию:");

        Print(one);

        Array.Reverse(one);

        Console.Write("отсортирован по убыванию:");

        Print(one);

        //создаем новый массив, копируя в него все элементы массива myArray

        int[] two = new int[one.Length];

        Array.Copy(one, two, one.Length);

        Console.Write("\nВторой массив: ");

        Print(two);

        //копируем в середину массива newArray фрагмент массива myArray

        Array.Copy(one, 2, two, 4, 4);

        Console.Write("Вставка элементов в него: ");

        Print(two);

        Console.WriteLine("\nИтоговые массивы ");

        Console.Write("Первый: ");

        Print(one);

        Console.Write("Второй: ");

        Print(two);

    }

}

Результат работы программы:
Первый массив: 2 4 6 1 -5 2 9 -2
Первый раз значение 2 встречается в нем в позиции 0
Последний раз значение 2 встречается в нем в позиции 5
отсортирован по возрастанию: -5 -2 1 2 2 4 6 9
отсортирован по убыванию: 9 6 4 2 2 1 -2 -5
Второй массив: 9 6 4 2 2 1 -2 -5
Вставка элементов в новый массив: 9 6 4 2 4 2 2 1
Итоговые массивы
Первый: 9 6 4 2 2 1 -2 -5
Второй: 9 6 4 2 4 2 2 1
Замечание. Обратите внимание на то, что myArray и newArray это ссылки на разные массивы, а не на один и тот же.
Использование спецификатора params
Иногда бывает необходимо создавать метод, в который можно передавать различное количество аргументов. Язык С# предоставляет такую возможность. Для этого параметр метода помечается спецификатором params, размещается в списке параметров последним и является массивом требуемого типа неопределенной длины. Следует отметить, что в методе может быть только один параметр помеченный спецификатором params.
Рассмотрим следующий пример:

class Program

{

    static int F(params int[] a)

    {

        int s = 0;

        foreach (int x in a)

        {

            s += x;

        }

        return s;

    }

    static void Main()

    {

        int a = 1, b = 2, c = 3, d = 4;

        Console.WriteLine(F());

        Console.WriteLine(F(a));

        Console.WriteLine(F(a, b));

        Console.WriteLine(F(a, b, c));

        Console.WriteLine(F(a, b, c, d));

    }

}

Результат работы программы:
Недостаточно аргументов
0
1
3
6
10
Как видим, в метод F может быть передано различное количество аргументов, в том числе, и нулевое.
Рассмотрим следующий пример:

class Program

{

    static void F(int a, out int s, params int[] b)

    {

        s = 0;

        if (b.Length != 0) //1

        {

            foreach (int x in b)

            {

                if (x == a)

                {

                    s += x;

                }

            }

        }

    }

    static void Main()

    {

        int a = 1;

        int[] x = { 0, 1, 2, 1, 0 };

        int z;

        F(a, out z, x);

        Console.WriteLine(z);

        int[] y = { };

        F(a, out z, y);

        Console.WriteLine(z);

    }

}

Результат работы программы:
Недостаточно аргументов
2
0
В данном случае, в метод F должно быть передано три параметра: параметр значение а, выходной параметр s и непустой массив b. Если мы попытаемся передать меньшее количество параметров, то компилятор выдаст сообщение об ошибке.

Категория: Основы языка С# | Добавил: solowey (18.01.2016)
Просмотров: 245 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Вход на сайт