Перейти к содержимому

Как в классе создать массив

  • автор:

Как создать массив класса java

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

Например, предположим, что у вас есть класс Person со следующим определением:

public class Person  private String name; private int age; public Person(String name, int age)  this.name = name; this.age = age; > > 

Вы можете создать массив объектов Person следующим образом:

Person[] people = new Person[3]; 

Этот код создаст массив, который может содержать три объекта Person . Чтобы заполнить этот массив объектами, вы можете создать новый объект Person для каждого элемента массива:

people[0] = new Person("Alice", 25); people[1] = new Person("Bob", 30); people[2] = new Person("Charlie", 35); 

Теперь у вас есть массив объектов Person , который содержит три объекта с разными именами и возрастами.

Как создать массив объектов класса и обращаться к их методам? C# [дубликат]

И вот есть в этом классе метод Info. И мне нужно обратиться к нему через какой-нибудь элемент массива так:

arr[0].Info(); 

Но компилятор выдаёт ошибку «Ссылка на объект не указывает на экземпляр объекта». И как мне быть? Подскажите, какие варианты обхода этой ошибки есть. Мне нужен именно массив объектов.

Отслеживать
задан 25 мая 2019 в 13:01
Арсений Кривецкий Арсений Кривецкий
49 2 2 серебряных знака 9 9 бронзовых знаков
arr[0] = new MyClass(); arr[0].Info();
25 мая 2019 в 13:02
А точно, спасибо большое.
25 мая 2019 в 13:05

создать массив — это как купить гостиницу без жильцов. Место есть, а жильцов нет. Чтобы они там появились, надо их туда поселить. Вот я в примере выше в комнату номер 0 поселил экземпляр класса MyClass , а потом уже обратился к нему по номеру комнаты и вызвал метод Info()

25 мая 2019 в 13:05

Ещё одна проблемка есть. В классе у меня есть свойство, в виде массива: public double[] weights < get; set; >; И когда я обращаюсь к нему вот так: arr[0].weights[0] = 3.4; Выкидывает ту же самую ошибку.

25 мая 2019 в 13:22
public double[] weights < get; set; >= new double[/*нужное вам количество*/];
25 мая 2019 в 13:24

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Проьблема с созданием массива рещается так

arr[0] = new MyClass(); arr[0].Info(); 

создать массив — это как купить гостиницу без жильцов. Место есть, а жильцов нет. Чтобы они там появились, надо их туда поселить. Вот я в примере выше в комнату номер 0 поселил экземпляр класса MyClass , а потом уже обратился к нему по номеру комнаты и вызвал метод Info()

Проблема с инициализацией поля так

public class MyClass < public double[] weights < get; set; >= new double[10]; > 
public class MyClass < public double[] weights < get; set;>public MyClass() < weights = new double[10]; >> 

Где вместо 10 указываете нужное вам количество.

Класс Массив, описывающий одномерный массив

Написать класс «массив». Реализовать в классе такие методы:

  • конструктор по умолчанию, конструктор с параметрами, конструктор копии;
  • деструктор;
  • поиск элемента в массиве по ключу;
  • сортировка элементов по возрастанию;
  • ввод с клавиатуры и вывод на экран (в виде методов класса и при помощи перегруженных операций потокового ввода и вывода);
  • перегрузить следующие операции:
    + (поэлементное сложение);
    += (добавление элемента в конец массива);
    – (удаление элемента по ключу);
    = (присвоение);
    == (сравнение по элементам);
    [] (взятие элемента с заданным индексом).

CppStudio.com

Размер массива myArray1: 10 Элементы массива myArray1, после его создания: 0 0 0 0 0 0 0 0 0 0 Размер массива myArray2: 15 Элементы массива myArray2, после его создания: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Введите 10 чисел: 1 9 2 8 3 7 4 6 5 0 Введенный массив: 1 9 2 8 3 7 4 6 5 0 Введите 15 чисел: -2 -3 4 1 -5 0 0 9 12 34 5 16 17 11 22 Введенный массив: -2 -3 4 1 -5 0 0 9 12 34 5 16 17 11 22 Размер массива myArray3: 10 1 9 2 8 3 7 4 6 5 0 -2 -3 4 1 -5 0 0 9 12 34 5 16 17 11 22 Массивы myArray1 и myArray2 не равны! Элемент массива myArray1: 0 Массив myArray4: -4 -6 8 2 -10 0 0 18 24 68 10 32 34 22 44 Массив myArray4 + 8: -4 -6 8 2 -10 0 0 18 24 68 10 32 34 22 44 111 112 113 -4 -6 8 2 -10 0 0 18 24 68 10 32 34 22 44 Искомый элемент не найден! -10 -6 -4 0 0 2 8 10 18 22 24 32 34 44 68

Заголовочный файл array.h класса Array .

#ifndef ARRAY_H #define ARRAY_H #include #include using std::istream; using std::ostream; class Array < friend istream &operator>> (istream &, Array &); // перегруженный оператор ввода friend ostream &operator; #endif // ARRAY_H

Исполняемый файл array.cpp класса Array .

#include "array.h" #include using std::cout; // пространство имен std для cout using std::cin; // пространство имен std для cin #include // для манипулятора setw using std::setw; // пространство имен std для setw #include Array::Array() // конструктор по умолчанию, без параметров < size = 10; // по умолчанию размер массива = 10 элементов ptr = new int [size]; // выделить место в памяти для массива for (int ix = 0; ix < size; ix++) // обнуляем массив ptr[ix] = 0; >Array::Array(int arraySize) // конструктор с параметрами < // если значение параметра больше 0, присвоить size значение arraySize, иначе - 10 size = (arraySize >0 ? arraySize : 10); ptr = new int [size]; // выделить место в памяти для массива for (int ix = 0; ix < size; ix++) // обнуляем массив ptr[ix] = 0; >Array::Array( const Array &arrayToCopy ) // конструктор копии :size(arrayToCopy.size) // инициализатор размера массива < ptr = new int [size]; // выделить место в памяти для массива for (int ix = 0; ix < size; ix++) ptr[ix] = arrayToCopy.ptr[ix]; // заполняем массив значениями массива arrayToCopy >Array::~Array() // десструктор класса Array < delete [] ptr; // освободить память, удалив массив >int Array::getSize() const // возвратить количество элементов массива < return size; >// перегруженный оператор ввода, для ввода значений массива с клавиатуры istream &operator>> (istream & input, Array &obj) < for (int ix = 0; ix < obj.size; ix++) input >> obj.ptr[ix]; // заполняем массив объекта obj return input; // позволяет множественный ввод, типа cin >> x >> y >> z >> . > // перегруженный оператор вывода для класса Array (вывод элементов массива на экран) ostream &operator output void Array::setArray() // заполнение массива < for (int ix = 0; ix < size; ix++) cin >> ptr[ix]; // ввод элемента массива с клавиатуры > void Array::getArray() // вывод массива < for (int ix = 0; ix < size; ix++) cout const Array &Array::operator= (const Array &right) // оператор присваивания < if (&right != this) // чтобы не выполнялось самоприсваивание < if (size != right.size) < delete [] ptr; // освободить пространство size = right.size; // установить нужный размер массива ptr = new int [size]; // выделить память под копируемый массив >for (int ix = 0; ix < size; ix++) ptr[ix] = right.ptr[ix]; // скопировать массив >return *this; // разрешает множественное присваивание, например x = t = e > bool Array::operator== (const Array &right) const// оператор сравнения < if (size != right.size) return false; // массивы с разным количеством элементов for (int ix = 0; ix < size; ix++) if (ptr[ix] != right.ptr[ix]) return false; // массивы не равны return true; // массивы равны >int &Array::operator[] (int subscript) < if(subscript < 0 || subscript >= size) < std::cerr return ptr[subscript]; // возврат ссылки на элемент массива > Array Array::operator+ (const Array &right) < if (size != right.size) < cout Array result(size); for (int ix = 0; ix < size; ix++) result.ptr[ix] = ptr[ix] + right.ptr[ix]; return result; // вернуть сумму >Array &Array::operator+= (const int &number) // оператор добавления элемента в конец массива < Array result(size); result = *this; // временно сохраним текущий массив delete [] ptr; // освобождаем память size = size + 1; // увеличиваем размер массива на 1 ptr = new int [size]; // выделяем память for (int ix = 0; ix < (size - 1); ix++) ptr[ix] = result.ptr[ix]; // скопировать массив ptr[size - 1] = number; // добавляем число в конец массива return *this; // каскадный вызов перегруженного оператора >Array &Array::operator- (const int & key) // оператор удаления элемента по ключу < int counterKey = 0; // счетчик найденных ключевых элементов // определяем количество элементов, которые необходимо удалить for (int ix = 0; ix < size; ix++) < if (ptr[ix] == key) counterKey++; >Array temp(size); temp = *this; // сохраняем текущий массив во временный объект delete [] ptr; // jосвобождае память size = size - counterKey; // переопределяем размер ptr = new int [size]; int counter = 0, ix = 0; while (counter < size) < if (temp[counter] != key) < ptr[ix] = temp.ptr[counter]; // скопировать массив ix++; >counter++; > return *this; > int Array::search(const int key) const // поиск по ключу < for (int ix = 0; ix < size; ix++) if ( key == ptr[ix] ) // поиск по ключу return (ix + 1); // позиция искомого элемента return -1; >void Array::choicesSort() // сортировка выбором < for (int repeat_counter = 0; repeat_counter < size; repeat_counter++) < int temp = ptr[0]; // временная переменная для хранения значения перестановки for (int element_counter = repeat_counter + 1; element_counter < size; element_counter++) < if (ptr[repeat_counter] >ptr[element_counter]) < temp = ptr[repeat_counter]; ptr[repeat_counter] = ptr[element_counter]; ptr[element_counter] = temp; >> > >

Файл с функцией main() . В этом файле я постарался протестировать все возможности класса.

#include using namespace std; #include «array.h» int main() < Array myArray1; // 10-ти элементный объект класса Array, по умолчанию Array myArray2(15); // 15-ти элементный объект класса Array cout > myArray2; // заполнение массива с помощью перегруженного оператора ввода // введенный массив cout << "Введенный массив: " << myArray2; Array myArray3(myArray1); // создаем объект класса Array, используя конструктор копирования cout << "Размер массива myArray3: " << myArray1.getSize() << endl; cout << myArray3; // вывод элементов массива myArray3 = myArray2; // присваиваем массиву myArray3 массив myArray2 cout << myArray3; // вывод элементов массива myArray3 if (myArray1 == myArray2) cout << "Массивы myArray1 и myArray2 равны!\n"; else cout << "Массивы myArray1 и myArray2 не равны!\n"; // вывод элемента массива, используя перегруженную операцию взятия индекса cout << "Элемент массива myArray1: " << myArray1[myArray1.getSize() -1] << endl; Array myArray4 = myArray2 + myArray3; // перегруженная операция сложения cout << "Массив myArray4:\n" << myArray4; myArray4 += 111; // добавление элемента 111 в конец массива cout << "Массив myArray4 + 8:\n" << ((myArray4 += 112) += 113); // удаляем элементы массива myArray4: 111 112 113 посредством перегруженной операции минус cout << (myArray4 - 111 - 112 - 113); int pos = 0; if ((pos = myArray4.search(30)) != -1) cout << "Позиция искомого элемента: " << pos << endl; else cout << "Искомый элемент не найден!\n"; myArray4.choicesSort(); // сортировка по возрастанию cout

Array Класс

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

Предоставляет методы для создания, изменения, поиска и сортировки массивов, то есть выступает в роли базового класса для всех массивов в среде CLR.

public ref class Array abstract : System::Collections::IList, System::Collections::IStructuralComparable, System::Collections::IStructuralEquatable
public ref class Array abstract : ICloneable, System::Collections::IList, System::Collections::IStructuralComparable, System::Collections::IStructuralEquatable
public ref class Array abstract : ICloneable, System::Collections::IList
public abstract class Array : System.Collections.IList, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable
public abstract class Array : ICloneable, System.Collections.IList, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable
[System.Serializable] public abstract class Array : ICloneable, System.Collections.IList
[System.Serializable] [System.Runtime.InteropServices.ComVisible(true)] public abstract class Array : ICloneable, System.Collections.IList
[System.Serializable] [System.Runtime.InteropServices.ComVisible(true)] public abstract class Array : ICloneable, System.Collections.IList, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable
type Array = class interface ICollection interface IEnumerable interface IList interface IStructuralComparable interface IStructuralEquatable
type Array = class interface ICollection interface IEnumerable interface IList interface IStructuralComparable interface IStructuralEquatable interface ICloneable
[] type Array = class interface ICloneable interface IList interface ICollection interface IEnumerable
[] [] type Array = class interface ICloneable interface IList interface ICollection interface IEnumerable
[] [] type Array = class interface ICloneable interface IList interface ICollection interface IEnumerable interface IStructuralComparable interface IStructuralEquatable
type Array = class interface IList interface ICollection interface IEnumerable interface IStructuralComparable interface IStructuralEquatable
[] [] type Array = class interface ICloneable interface ICollection interface IList interface IEnumerable interface IStructuralComparable interface IStructuralEquatable
Public MustInherit Class Array Implements IList, IStructuralComparable, IStructuralEquatable
Public MustInherit Class Array Implements ICloneable, IList, IStructuralComparable, IStructuralEquatable
Public MustInherit Class Array Implements ICloneable, IList

Наследование
Реализации

Примеры

В следующем примере кода показано использование Array.Copy для копирования элементов между массивом целочисленного типа и массивом объектов типа Object.

using namespace System; void PrintValues(array^myArr); void PrintValues(array^myArr); void main() < // Creates and initializes a new int array and a new Object array. array^myIntArray = < 1,2,3,4,5 >; array^myObjArray = < 26,27,28,29,30 >; // Prints the initial values of both arrays. Console::WriteLine("Initially:"); Console::Write("int array: "); PrintValues(myIntArray); Console::Write("Object array:"); PrintValues(myObjArray); // Copies the first two elements from the int array to the Object array. System::Array::Copy(myIntArray, myObjArray, 2); // Prints the values of the modified arrays. Console::WriteLine("\nAfter copying the first two elements of the int array to the Object array:"); Console::Write("int array: "); PrintValues(myIntArray); Console::Write("Object array:"); PrintValues(myObjArray); // Copies the last two elements from the Object array to the int array. System::Array::Copy(myObjArray, myObjArray->GetUpperBound(0) - 1, myIntArray, myIntArray->GetUpperBound(0) - 1, 2); // Prints the values of the modified arrays. Console::WriteLine("\nAfter copying the last two elements of the Object array to the int array:"); Console::Write("int array: "); PrintValues(myIntArray); Console::Write("Object array:"); PrintValues(myObjArray); > void PrintValues(array^myArr) < for (int i = 0; i < myArr->Length; i++) < Console::Write("\t", myArr[i]); > Console::WriteLine(); > void PrintValues(array^myArr) < for (int i = 0; i < myArr->Length; i++) < Console::Write("\t", myArr[i]); > Console::WriteLine(); > /* This code produces the following output. Initially: int array: 1 2 3 4 5 Object array: 26 27 28 29 30 After copying the first two elements of the int array to the Object array: int array: 1 2 3 4 5 Object array: 1 2 28 29 30 After copying the last two elements of the Object array to the int array: int array: 1 2 3 29 30 Object array: 1 2 28 29 30 */ 
open System let printValues myArr = for i in myArr do printf $"\t" printfn "" // Creates and initializes a new integer array and a new Object array. let myIntArray = [| 1..5 |] let myObjArray = [| 26..30 |] // Prints the initial values of both arrays. printfn "Initially," printf "integer array:" printValues myIntArray printfn "Object array: " printValues myObjArray // Copies the first two elements from the integer array to the Object array. Array.Copy(myIntArray, myObjArray, 2) // Prints the values of the modified arrays. printfn "\nAfter copying the first two elements of the integer array to the Object array," printf "integer array:" printValues myIntArray printf"Object array: " printValues myObjArray // Copies the last two elements from the Object array to the integer array. Array.Copy(myObjArray, myObjArray.GetUpperBound 0 - 1, myIntArray, myIntArray.GetUpperBound 0 - 1, 2) // Prints the values of the modified arrays. printfn $"\nAfter copying the last two elements of the Object array to the integer array," printf "integer array:" printValues myIntArray printf "Object array: " printValues myObjArray // This code produces the following output. // Initially, // integer array: 1 2 3 4 5 // Object array: 26 27 28 29 30 // // After copying the first two elements of the integer array to the Object array, // integer array: 1 2 3 4 5 // Object array: 1 2 28 29 30 // // After copying the last two elements of the Object array to the integer array, // integer array: 1 2 3 29 30 // Object array: 1 2 28 29 30 
using System; public class SamplesArray < public static void Main() < // Creates and initializes a new integer array and a new Object array. int[] myIntArray = new int[5] < 1, 2, 3, 4, 5 >; Object[] myObjArray = new Object[5] < 26, 27, 28, 29, 30 >; // Prints the initial values of both arrays. Console.WriteLine("Initially,"); Console.Write("integer array:"); PrintValues(myIntArray); Console.Write("Object array: "); PrintValues(myObjArray); // Copies the first two elements from the integer array to the Object array. System.Array.Copy(myIntArray, myObjArray, 2); // Prints the values of the modified arrays. Console.WriteLine("\nAfter copying the first two elements of the integer array to the Object array,"); Console.Write("integer array:"); PrintValues(myIntArray); Console.Write("Object array: "); PrintValues(myObjArray); // Copies the last two elements from the Object array to the integer array. System.Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2); // Prints the values of the modified arrays. Console.WriteLine("\nAfter copying the last two elements of the Object array to the integer array,"); Console.Write("integer array:"); PrintValues(myIntArray); Console.Write("Object array: "); PrintValues(myObjArray); > public static void PrintValues(Object[] myArr) < foreach (Object i in myArr) < Console.Write("\t", i); > Console.WriteLine(); > public static void PrintValues(int[] myArr) < foreach (int i in myArr) < Console.Write("\t", i); > Console.WriteLine(); > > /* This code produces the following output. Initially, integer array: 1 2 3 4 5 Object array: 26 27 28 29 30 After copying the first two elements of the integer array to the Object array, integer array: 1 2 3 4 5 Object array: 1 2 28 29 30 After copying the last two elements of the Object array to the integer array, integer array: 1 2 3 29 30 Object array: 1 2 28 29 30 */ 
Public Class SamplesArray Public Shared Sub Main() ' Creates and initializes a new integer array and a new Object array. Dim myIntArray() As Integer = Dim myObjArray() As Object = ' Prints the initial values of both arrays. Console.WriteLine("Initially:") Console.Write("integer array:") PrintValues(myIntArray) Console.Write("Object array: ") PrintValues(myObjArray) ' Copies the first two elements from the integer array to the Object array. System.Array.Copy(myIntArray, myObjArray, 2) ' Prints the values of the modified arrays. Console.WriteLine(ControlChars.NewLine + "After copying the first two" _ + " elements of the integer array to the Object array:") Console.Write("integer array:") PrintValues(myIntArray) Console.Write("Object array: ") PrintValues(myObjArray) ' Copies the last two elements from the Object array to the integer array. System.Array.Copy(myObjArray, myObjArray.GetUpperBound(0) - 1, myIntArray, myIntArray.GetUpperBound(0) - 1, 2) ' Prints the values of the modified arrays. Console.WriteLine(ControlChars.NewLine + "After copying the last two" _ + " elements of the Object array to the integer array:") Console.Write("integer array:") PrintValues(myIntArray) Console.Write("Object array: ") PrintValues(myObjArray) End Sub Public Overloads Shared Sub PrintValues(myArr() As Object) Dim i As Object For Each i In myArr Console.Write(ControlChars.Tab + "", i) Next i Console.WriteLine() End Sub Public Overloads Shared Sub PrintValues(myArr() As Integer) Dim i As Integer For Each i In myArr Console.Write(ControlChars.Tab + "", i) Next i Console.WriteLine() End Sub End Class ' This code produces the following output. ' ' Initially: ' integer array: 1 2 3 4 5 ' Object array: 26 27 28 29 30 ' ' After copying the first two elements of the integer array to the Object array: ' integer array: 1 2 3 4 5 ' Object array: 1 2 28 29 30 ' ' After copying the last two elements of the Object array to the integer array: ' integer array: 1 2 3 29 30 ' Object array: 1 2 28 29 30 

В следующем примере кода создается и инициализируется Array и отображаются его свойства и элементы.

using namespace System; void PrintValues(Array^ myArr); void main() < // Creates and initializes a new three-dimensional Array instance of type Int32. Array^ myArr = Array::CreateInstance( Int32::typeid, 2, 3, 4 ); for ( int i = myArr->GetLowerBound( 0 ); i GetUpperBound( 0 ); i++ ) < for ( int j = myArr->GetLowerBound( 1 ); j GetUpperBound( 1 ); j++ ) < for ( int k = myArr->GetLowerBound( 2 ); k GetUpperBound( 2 ); k++ ) myArr->SetValue( (i * 100) + (j * 10) + k, i, j, k ); > > // Displays the properties of the Array. Console::WriteLine( "The Array instance has dimension(s) and a total of elements.", myArr->Rank, myArr->Length ); Console::WriteLine( "\tLength\tLower\tUpper" ); for ( int i = 0; i < myArr->Rank; i++ ) < Console::Write( ":\t", i, myArr->GetLength( i ) ); Console::WriteLine( "\t\t", myArr->GetLowerBound( i ), myArr->GetUpperBound( i ) ); > Console::WriteLine( "The Array instance contains the following values:" ); PrintValues( myArr ); > void PrintValues( Array^ myArr ) < System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator(); int i = 0; int cols = myArr->GetLength( myArr->Rank - 1 ); while ( myEnumerator->MoveNext() ) < if ( i < cols ) i++; else < Console::WriteLine(); i = 1; >Console::Write( "\t", myEnumerator->Current ); > Console::WriteLine(); > /* This code produces the following output. The Array instance has 3 dimension(s) and a total of 24 elements. Length Lower Upper 0: 2 0 1 1: 3 0 2 2: 4 0 3 The Array instance contains the following values: 0 1 2 3 10 11 12 13 20 21 22 23 100 101 102 103 110 111 112 113 120 121 122 123 */ 
open System let printValues (myArray: Array) = let mutable i = 0 let cols = myArray.GetLength(myArray.Rank - 1) for item in myArray do if i < cols then i " printfn "" // Creates and initializes a new three-dimensional Array of type int. let myArr = Array.CreateInstance(typeof, 2, 3, 4) for i = myArr.GetLowerBound 0 to myArr.GetUpperBound 0 do for j = myArr.GetLowerBound 1 to myArr.GetUpperBound 1 do for k = myArr.GetLowerBound 2 to myArr.GetUpperBound 2 do myArr.SetValue(i * 100 + j * 10 + k, i, j, k) // Displays the properties of the Array. printfn $"The Array has dimension(s) and a total of elements." printfn $"\tLength\tLower\tUpper" for i = 0 to myArr.Rank - 1 do printf $":\t" printfn $"\t\t" // Displays the contents of the Array. printfn "The Array contains the following values:" printValues myArr // This code produces the following output. // The Array has 3 dimension(s) and a total of 24 elements. // Length Lower Upper // 0: 2 0 1 // 1: 3 0 2 // 2: 4 0 3 // // The Array contains the following values: // 0 1 2 3 // 10 11 12 13 // 20 21 22 23 // 100 101 102 103 // 110 111 112 113 // 120 121 122 123 
// Creates and initializes a new three-dimensional Array of type int. Array myArr = Array.CreateInstance(typeof(int), 2, 3, 4); for (int i = myArr.GetLowerBound(0); i > > // Displays the properties of the Array. Console.WriteLine("The Array has dimension(s) and a total of elements.", myArr.Rank, myArr.Length); Console.WriteLine("\tLength\tLower\tUpper"); for (int i = 0; i < myArr.Rank; i++) < Console.Write(":\t", i, myArr.GetLength(i)); Console.WriteLine("\t\t", myArr.GetLowerBound(i), myArr.GetUpperBound(i)); > // Displays the contents of the Array. Console.WriteLine("The Array contains the following values:"); PrintValues(myArr); void PrintValues(Array myArray) < System.Collections.IEnumerator myEnumerator = myArray.GetEnumerator(); int i = 0; int cols = myArray.GetLength(myArray.Rank - 1); while (myEnumerator.MoveNext()) < if (i < cols) < i++; >else < Console.WriteLine(); i = 1; >Console.Write("\t", myEnumerator.Current); > Console.WriteLine(); > // This code produces the following output. // The Array has 3 dimension(s) and a total of 24 elements. // Length Lower Upper // 0: 2 0 1 // 1: 3 0 2 // 2: 4 0 3 // // The Array contains the following values: // 0 1 2 3 // 10 11 12 13 // 20 21 22 23 // 100 101 102 103 // 110 111 112 113 // 120 121 122 123 
Public Class SamplesArray2 Public Shared Sub Main() ' Creates and initializes a new three-dimensional Array of ' type Int32. Dim myArr As Array = Array.CreateInstance(GetType(Int32), 2, 3, 4) Dim i As Integer For i = myArr.GetLowerBound(0) To myArr.GetUpperBound(0) Dim j As Integer For j = myArr.GetLowerBound(1) To myArr.GetUpperBound(1) Dim k As Integer For k = myArr.GetLowerBound(2) To myArr.GetUpperBound(2) myArr.SetValue(i * 100 + j * 10 + k, i, j, k) Next k Next j Next i ' Displays the properties of the Array. Console.WriteLine("The Array has dimension(s) and a " _ + "total of elements.", myArr.Rank, myArr.Length) Console.WriteLine(ControlChars.Tab + "Length" + ControlChars.Tab _ + "Lower" + ControlChars.Tab + "Upper") For i = 0 To myArr.Rank - 1 Console.Write(":" + ControlChars.Tab + "", i, myArr.GetLength(i)) Console.WriteLine(ControlChars.Tab + "" + ControlChars.Tab _ + "", myArr.GetLowerBound(i), myArr.GetUpperBound(i)) Next i ' Displays the contents of the Array. Console.WriteLine("The Array contains the following values:") PrintValues(myArr) End Sub Public Shared Sub PrintValues(myArr As Array) Dim myEnumerator As System.Collections.IEnumerator = myArr.GetEnumerator() Dim i As Integer = 0 Dim cols As Integer = myArr.GetLength(myArr.Rank - 1) While myEnumerator.MoveNext() If i < cols Then i += 1 Else Console.WriteLine() i = 1 End If Console.Write(ControlChars.Tab + "", myEnumerator.Current) End While Console.WriteLine() End Sub End Class ' This code produces the following output. ' ' The Array has 3 dimension(s) and a total of 24 elements. ' Length Lower Upper ' 0: 2 0 1 ' 1: 3 0 2 ' 2: 4 0 3 ' The Array contains the following values: ' 0 1 2 3 ' 10 11 12 13 ' 20 21 22 23 ' 100 101 102 103 ' 110 111 112 113 ' 120 121 122 123 

Комментарии

Класс Array не является частью пространства имен System.Collections. Тем не менее, он все равно считается коллекцией, так как он основан на интерфейсе IList.

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

Элемент — это значение в Array. Длина Array — общее количество элементов, которое может содержать массив. Нижняя граница Array — это индекс его первого элемента. Array может иметь любую нижнюю границу, но по умолчанию его нижняя граница равна нулю. При создании экземпляра класса с помощью CreateInstanceможно определить другую нижнюю границуArray. Многомерный Array объект может иметь разные границы для каждого измерения. Массив может иметь не более 32 измерений.

В отличие от классов в пространстве имен System.Collections, Array имеет фиксированную емкость. Чтобы увеличить емкость, необходимо создать новый объект Array с требуемой емкостью, скопировать элементы из старого объекта Array в новый, а затем удалить старый Array.

Размер массива ограничен максимальным количеством элементов — 4 миллиарда, а также максимальным индексом 0X7FEFFFFF в любом заданном измерении (0X7FFFFFC7 для массивов байтов и однобайтовых структур).

.NET framework: По умолчанию максимальный размер Array составляет 2 гигабайта (ГБ). В 64-разрядной среде можно избежать ограничения на размер, установив значение атрибута enabled элемента конфигурации gcAllowVeryLargeObjects равным true в среде выполнения.

Одномерные массивы реализуют универсальные интерфейсы System.Collections.Generic.IList , System.Collections.Generic.ICollection , System.Collections.Generic.IEnumerable , System.Collections.Generic.IReadOnlyList и System.Collections.Generic.IReadOnlyCollection . Реализации предоставляются массивам во время выполнения, и таким образом, универсальные интерфейсы не отображаются в синтаксисе объявления класса Array. Кроме того, нет справочных разделов по членам интерфейса, доступным только путем приведения массива к универсальному типу интерфейса (явные реализации интерфейса). Ключевой момент, который необходимо учитывать при приведении массива к одному из этих интерфейсов, заключается в том, что члены, которые добавляют, вставляют или удаляют элементы, вызывают исключение NotSupportedException.

Объекты Type предоставляют сведения об объявлениях типов массивов. Объекты Array с тем же типом массива имеют одинаковые объекты Type.

Type.IsArray и Type.GetElementType могут не возвращать ожидаемые результаты с Array, потому что при приведении массива к типу Array результат — это объект, который не является массивом. То есть typeof(System.Array).IsArray возвращает false , а typeof(System.Array).GetElementType возвращает null .

Метод Array.Copy копирует элементы не только между массивами одного типа, но и между стандартными массивами различных типов; он автоматически осуществляет приведение типов.

Некоторые методы, например CreateInstance, Copy, CopyTo, GetValue и SetValue, предоставляют перегрузки, принимающие 64-разрядные целые числа в качестве параметров, для обеспечения возможности работы с массивами большой емкости. LongLength и GetLongLength возвращают 64-разрядные целые числа, указывающие длину массива.

Сортировка Array не гарантируется. Перед выполнением операций, для которых требуется сортировка Array (например, BinarySearch), Array нужно предварительно отсортировать.

Использование объектов Array указателей в машинном коде не поддерживается и вызывает исключение NotSupportedException для нескольких методов.

Свойства

Получает значение, указывающее, имеет ли список Array фиксированный размер.

Получает значение, указывающее, является ли объект Array доступным только для чтения.

Возвращает значение, показывающее, является ли доступ к коллекции Array синхронизированным (потокобезопасным).

Возвращает общее число элементов во всех измерениях массива Array.

Возвращает 64-разрядное целое число, представляющее общее число элементов во всех измерениях массива Array.

Возвращает максимальное количество элементов, которые могут содержаться в массиве.

Получает ранг (число измерений) массива Array. Например, одномерный массив возвращает 1, двухмерный массив возвращает 2 и т д

Получает объект, с помощью которого можно синхронизировать доступ к коллекции Array.

Методы

Возвращает для заданного массива доступную только для чтения программу-оболочку.

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

Выполняет поиск значения в диапазоне элементов отсортированного одномерного массива, используя указанный интерфейс IComparer.

Выполняет поиск заданного элемента во всем отсортированном одномерном массиве, используя интерфейс IComparable, реализуемый каждым элементом массива и заданным объектом.

Выполняет поиск значения во всем отсортированном одномерном массиве, используя указанный универсальный интерфейс IComparer.

Выполняет поиск значения в диапазоне элементов отсортированного одномерного массива, используя для этого универсальный интерфейс IComparable , реализуемый каждым элементом массива Array и заданным значением.

Выполняет поиск значения в диапазоне элементов отсортированного одномерного массива, используя указанный универсальный интерфейс IComparer .

Выполняет поиск заданного элемента во всем отсортированном одномерном массиве, используя для этого универсальный интерфейс IComparable , реализуемый каждым элементом массива Array и заданным объектом.

Выполняет поиск значения во всем отсортированном одномерном массиве, используя указанный универсальный интерфейс IComparer .

Очищает содержимое массива.

Задает для диапазона элементов в массиве значение, предусмотренное по умолчанию для каждого типа элементов.

Создает неполную копию Array.

Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения. Гарантирует, что в случае невозможности успешно скопировать весь диапазон, все изменения будут отменены.

Преобразует массив одного типа в массив другого типа.

Копирует диапазон элементов из массива Array, начиная с первого элемента, и вставляет его в другой массив Array, также начиная с первого элемента. Длина задается как 32-битовое целое число.

Копирует диапазон элементов из массива Array, начиная с первого элемента, и вставляет его в другой массив Array, также начиная с первого элемента. Длина задается как 64-битовое целое число.

Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения. Длина и индексы задаются как 32-битовые целые числа.

Копирует диапазон элементов из массива Array, начиная с заданного индекса источника, и вставляет его в другой массив Array, начиная с заданного индекса назначения. Длина и индексы задаются как 64-разрядные целые числа.

Копирует все элементы текущего одномерного массива в заданный одномерный массив начиная с указанного индекса в массиве назначения. Индекс задается как 32-битовое целое число.

Копирует все элементы текущего одномерного массива в заданный одномерный массив начиная с указанного индекса в массиве назначения. Индекс задается как 64-битовое целое число.

Создает одномерный массив Array указанного типа Type и длины, индексация которого начинается с нуля.

Создает двумерный массив Array указанного типа Type с заданными длинами измерений и индексацией, начинающейся с нуля.

Создает трехмерный массив Array указанного типа Type с заданными длинами по измерениям и индексацией, начинающейся с нуля.

Создает многомерный массив Array заданного типа Type и с заданными значениями длины измерения и индексацией, начинающейся с нуля. Длины по измерениям задаются в массиве 32-битовых целых чисел.

Создает многомерный массив Array с указанным типом Type и длиной по измерениям и с заданными нижними границами.

Создает многомерный массив Array заданного типа Type и с заданными значениями длины измерения и индексацией, начинающейся с нуля. Длины по измерениям задаются в массиве 64-битовых целых чисел.

Возвращает пустой массив.

Определяет, равен ли указанный объект текущему объекту.

Определяет, содержит ли заданный массив элементы, удовлетворяющие условиям указанного предиката.

Присваивает заданное value типа T каждому элементу указанного array .

Присваивает заданное value типа T элементам указанного array , которые находятся в диапазоне startIndex (включительно) и следующем количестве count индексов.

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает первое найденное вхождение в пределах всего списка Array.

Извлекает все элементы, удовлетворяющие условиям указанного предиката.

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка Array, начинающемся с заданного индекса и содержащем указанное число элементов.

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого вхождения в диапазоне элементов списка Array, начиная с заданного индекса и заканчивая последним элементом.

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс первого найденного вхождения в пределах всего списка Array.

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает последнее найденное вхождение в пределах всего списка Array.

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс последнего вхождения в диапазоне элементов списка Array, содержащем указанное число элементов и заканчивающемся элементом с заданным индексом.

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс последнего вхождения в диапазоне элементов списка Array, начиная с первого элемента и заканчивая элементом с заданным индексом.

Выполняет поиск элемента, удовлетворяющего условиям указанного предиката, и возвращает отсчитываемый от нуля индекс последнего найденного вхождения в пределах всего списка Array.

Выполняет указанное действие с каждым элементом указанного массива.

Возвращает объект IEnumerator для Array.

Служит хэш-функцией по умолчанию.

Возвращает 32-разрядное целое число, представляющее количество элементов в заданном измерении массива Array.

Возвращает 64-разрядное целое число, представляющее количество элементов в заданном измерении массива Array.

Получает Индекс первого элемента заданного измерения в массиве.

Возвращает объект Type для текущего экземпляра.

Получает Индекс последнего элемента заданного измерения в массиве.

Возвращает значение, хранящееся в указанной позиции одномерного массива Array. Индекс задается как 32-битовое целое число.

Получает значение в заданной позиции двумерного массива Array. Индексы задаются в виде 32-битовых целых чисел.

Получает значение, хранящееся в указанной позиции трехмерного массива Array. Индексы задаются в виде 32-битовых целых чисел.

Получает значение, находящееся в указанной позиции многомерного массива Array. Индексы задаются как массив 32-битовых целых чисел.

Возвращает значение, хранящееся в указанной позиции одномерного массива Array. Индекс задается как 64-битовое целое число.

Получает значение в заданной позиции двумерного массива Array. Индексы задаются в виде 64-битовых целых чисел.

Получает значение, хранящееся в указанной позиции трехмерного массива Array. Индексы задаются в виде 64-битовых целых чисел.

Получает значение, находящееся в указанной позиции многомерного массива Array. Индексы задаются как массив 64-битовых целых чисел.

Выполняет поиск указанного объекта внутри всего одномерного массива и возвращает индекс его первого вхождения.

Выполняет поиск указанного объекта в диапазоне элементов одномерного массива и возвращает индекс первого найденного совпадения. Диапазон начинается с указанного индекса и заканчивается концом массива.

Выполняет поиск указанного объекта в диапазоне элементов одномерного массива и возвращает индекс первого найденного совпадения. Диапазон расширяется от указанного индекса заданного числа элементов.

Выполняет поиск указанного объекта внутри всего одномерного массива и возвращает индекс его первого вхождения.

Выполняет поиск указанного объекта в диапазоне элементов одномерного массива и возвращает индекс первого найденного совпадения. Диапазон начинается с указанного индекса и заканчивается концом массива.

Выполняет поиск указанного объекта в диапазоне элементов одномерного массива и возвращает индекс первого найденного совпадения. Диапазон расширяется от указанного индекса заданного числа элементов.

Инициализирует каждый элемент массива Array типа значения путем вызова конструктора без параметров для типа значений.

Выполняет поиск заданного объекта и возвращает индекс его последнего вхождения внутри всего одномерного массива Array.

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

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

Выполняет поиск указанного объекта и возвращает индекс последнего вхождения во всем массиве Array.

Выполняет поиск указанного объекта и возвращает индекс последнего вхождения в диапазоне элементов массива Array, начиная с первого элемента и заканчивая элементом с заданным индексом.

Выполняет поиск указанного объекта и возвращает индекс последнего вхождения в диапазоне элементов массива Array, содержащем указанное число элементов и заканчивающемся в позиции с указанным индексом.

Создает неполную копию текущего объекта Object.

Изменяет количество элементов в одномерном массиве до указанной величины.

Изменяет порядок элементов во всем одномерном массиве Array на обратный.

Изменяет порядок подмножества элементов в одномерном массиве Array на обратный.

Изменяет порядок последовательности элементов в одномерном общем массиве на обратный.

Изменяет порядок последовательности подмножества элементов в одномерном общем массиве на обратный.

Присваивает значение элементу, находящемуся в указанной позиции одномерного массива Array. Индекс задается как 32-битовое целое число.

Присваивает значение элементу, находящемуся в указанной позиции двухмерного массива Array. Индексы задаются в виде 32-битовых целых чисел.

Присваивает значение элементу, находящемуся в указанной позиции трехмерного массива Array. Индексы задаются в виде 32-битовых целых чисел.

Присваивает значение элементу, находящемуся в указанной позиции многомерного массива Array. Индексы задаются как массив 32-битовых целых чисел.

Присваивает значение элементу, находящемуся в указанной позиции одномерного массива Array. Индекс задается как 64-битовое целое число.

Присваивает значение элементу, находящемуся в указанной позиции двухмерного массива Array. Индексы задаются в виде 64-битовых целых чисел.

Присваивает значение элементу, находящемуся в указанной позиции трехмерного массива Array. Индексы задаются в виде 64-битовых целых чисел.

Присваивает значение элементу, находящемуся в указанной позиции многомерного массива Array. Индексы задаются как массив 64-битовых целых чисел.

Сортирует элементы во всем одномерном массиве Array, используя реализацию интерфейса IComparable каждого элемента массива Array.

Сортирует пару одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя реализацию интерфейса IComparable каждого ключа.

Сортирует пару одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя указанный интерфейс IComparer.

Сортирует диапазон элементов в паре одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя реализацию интерфейса IComparable каждого ключа.

Сортирует диапазон элементов в паре одномерных объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя указанный интерфейс IComparer.

Сортирует элементы в одномерном массиве Array, используя указанный интерфейс IComparer.

Сортирует элементы в диапазоне элементов одномерного массива Array с помощью реализации интерфейса IComparable каждого элемента массива Array.

Сортирует элементы в диапазоне элементов одномерного массива Array, используя указанный интерфейс IComparer.

Сортирует элементы во всем массиве Array, используя реализацию универсального интерфейса IComparable каждого элемента массива Array.

Сортирует элементы массива Array с использованием указанного объекта Comparison .

Сортирует элементы в массиве Array, используя указанный универсальный интерфейс IComparer .

Сортирует элементы в диапазоне элементов массива Array, используя реализацию универсального интерфейса IComparable каждого элемента массива Array.

Сортирует элементы в диапазоне элементов массива Array, используя указанный универсальный интерфейс IComparer .

Сортирует пару объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя реализацию универсального интерфейса IComparable каждого ключа.

Сортирует пару объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя указанный универсальный интерфейс IComparer .

Сортирует диапазон элементов в паре объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя реализацию универсального интерфейса IComparable каждого ключа.

Сортирует диапазон элементов в паре объектов Array (один содержит ключи, а другой — соответствующие элементы) по ключам в первом массиве Array, используя указанный универсальный интерфейс IComparer .

Возвращает строку, представляющую текущий объект.

Определяет, все ли элементы массива удовлетворяют условиям указанного предиката.

Явные реализации интерфейса

Получает число элементов, содержащихся в интерфейсе Array.

Получает значение, определяющее, является ли доступ к коллекции Array синхронизированным (потокобезопасным).

Получает объект, с помощью которого можно синхронизировать доступ к коллекции Array.

При вызове этого метода всегда возникает исключение NotSupportedException.

Удаляет все элементы из коллекции IList.

Определяет, входит ли элемент в коллекцию IList.

Определяет индекс заданного элемента коллекции IList.

Вставляет элемент в список IList по указанному индексу.

Получает значение, показывающее, имеет ли объект Array фиксированный размер.

Получает значение, указывающее, доступен ли объект Array только для чтения.

Возвращает или задает элемент по указанному индексу.

Удаляет первое вхождение указанного объекта из коллекции IList.

Удаляет элемент IList по указанному индексу.

Определяет позицию текущего объекта коллекции относительно другого объекта в порядке сортировки (находится перед другим объектов, на одной позиции с ним или после другого объекта).

Определяет, равен ли объект текущему экземпляру.

Возвращает хэш-код текущего экземпляра.

Методы расширения

Приводит элементы объекта IEnumerable к заданному типу.

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

Позволяет осуществлять параллельный запрос.

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Применяется к

Потокобезопасность

Открытые статические ( Shared в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасная работа с членами экземпляров типа не гарантируется.

Эта реализация не предоставляет синхронизированную (потокобезопасную) оболочку Arrayдля ; однако классы .NET на Array основе предоставляют собственную синхронизированную версию коллекции с помощью SyncRoot свойства .

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

См. также раздел

  • Object
  • Type
  • Выполнение строковых операций без учета языка и региональных параметров в массивах
  • Массивы (Руководство по программированию на C#)
  • Массивы в F#
  • Массивы в Visual Basic

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *