Array.Resize<T>(T[], Int32) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zmienia liczbę elementów tablicy jednowymiarowej na określony nowy rozmiar.
public:
generic <typename T>
static void Resize(cli::array <T> ^ % array, int newSize);
public static void Resize<T> (ref T[] array, int newSize);
public static void Resize<T> (ref T[]? array, int newSize);
static member Resize : T[] * int -> unit
Public Shared Sub Resize(Of T) (ByRef array As T(), newSize As Integer)
Parametry typu
- T
Typ elementów tablicy.
Parametry
- array
- T[]
Jednowymiarowa, zerowa tablica do zmiany rozmiaru lub null
utworzenia nowej tablicy o określonym rozmiarze.
- newSize
- Int32
Rozmiar nowej tablicy.
Wyjątki
Parametr newSize
ma wartość niższą niż zero.
Przykłady
W poniższym przykładzie pokazano, jak zmiana rozmiaru wpływa na tablicę.
using namespace System;
static void PrintIndexAndValues(array<String^>^myArr)
{
for(int i = 0; i < myArr->Length; i++)
{
Console::WriteLine(L" [{0}] : {1}", i, myArr[i]);
}
Console::WriteLine();
}
int main()
{
// Create and initialize a new string array.
array<String^>^myArr = {L"The", L"quick", L"brown", L"fox",
L"jumps", L"over", L"the", L"lazy", L"dog"};
// Display the values of the array.
Console::WriteLine(
L"The string array initially contains the following values:");
PrintIndexAndValues(myArr);
// Resize the array to a bigger size (five elements larger).
Array::Resize(myArr, myArr->Length + 5);
// Display the values of the array.
Console::WriteLine(L"After resizing to a larger size, ");
Console::WriteLine(L"the string array contains the following values:");
PrintIndexAndValues(myArr);
// Resize the array to a smaller size (four elements).
Array::Resize(myArr, 4);
// Display the values of the array.
Console::WriteLine(L"After resizing to a smaller size, ");
Console::WriteLine(L"the string array contains the following values:");
PrintIndexAndValues(myArr);
return 1;
}
/*
This code produces the following output.
The string array initially contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
[4] : jumps
[5] : over
[6] : the
[7] : lazy
[8] : dog
After resizing to a larger size,
the string array contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
[4] : jumps
[5] : over
[6] : the
[7] : lazy
[8] : dog
[9] :
[10] :
[11] :
[12] :
[13] :
After resizing to a smaller size,
the string array contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
*/
using System;
public class SamplesArray
{
public static void Main() {
// Create and initialize a new string array.
String[] myArr = {"The", "quick", "brown", "fox", "jumps",
"over", "the", "lazy", "dog"};
// Display the values of the array.
Console.WriteLine(
"The string array initially contains the following values:");
PrintIndexAndValues(myArr);
// Resize the array to a bigger size (five elements larger).
Array.Resize(ref myArr, myArr.Length + 5);
// Display the values of the array.
Console.WriteLine("After resizing to a larger size, ");
Console.WriteLine("the string array contains the following values:");
PrintIndexAndValues(myArr);
// Resize the array to a smaller size (four elements).
Array.Resize(ref myArr, 4);
// Display the values of the array.
Console.WriteLine("After resizing to a smaller size, ");
Console.WriteLine("the string array contains the following values:");
PrintIndexAndValues(myArr);
}
public static void PrintIndexAndValues(String[] myArr) {
for(int i = 0; i < myArr.Length; i++)
{
Console.WriteLine(" [{0}] : {1}", i, myArr[i]);
}
Console.WriteLine();
}
}
/*
This code produces the following output.
The string array initially contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
[4] : jumps
[5] : over
[6] : the
[7] : lazy
[8] : dog
After resizing to a larger size,
the string array contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
[4] : jumps
[5] : over
[6] : the
[7] : lazy
[8] : dog
[9] :
[10] :
[11] :
[12] :
[13] :
After resizing to a smaller size,
the string array contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
*/
open System
let printIndexAndValues (myArr: string []) =
for i = 0 to myArr.Length - 1 do
printfn $" [{i}] : {myArr[i]}"
printfn ""
// Create and initialize a new string array.
let mutable myArr =
[| "The"; "quick"; "brown"; "fox"; "jumps"
"over"; "the"; "lazy"; "dog" |]
// Display the values of the array.
printfn "The string array initially contains the following values:"
printIndexAndValues myArr
// Resize the array to a bigger size (five elements larger).
Array.Resize(&myArr, myArr.Length + 5)
// Display the values of the array.
printfn "After resizing to a larger size, "
printfn "the string array contains the following values:"
printIndexAndValues myArr
// Resize the array to a smaller size (four elements).
Array.Resize(&myArr, 4)
// Display the values of the array.
printfn "After resizing to a smaller size, "
printfn "the string array contains the following values:"
printIndexAndValues myArr
(*
This code produces the following output.
The string array initially contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
[4] : jumps
[5] : over
[6] : the
[7] : lazy
[8] : dog
After resizing to a larger size,
the string array contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
[4] : jumps
[5] : over
[6] : the
[7] : lazy
[8] : dog
[9] :
[10] :
[11] :
[12] :
[13] :
After resizing to a smaller size,
the string array contains the following values:
[0] : The
[1] : quick
[2] : brown
[3] : fox
*)
Public Class SamplesArray
Public Shared Sub Main()
' Create and initialize a new string array.
Dim myArr As String() = {"The", "quick", "brown", "fox", _
"jumps", "over", "the", "lazy", "dog"}
' Display the values of the array.
Console.WriteLine( _
"The string array initially contains the following values:")
PrintIndexAndValues(myArr)
' Resize the array to a bigger size (five elements larger).
Array.Resize(myArr, myArr.Length + 5)
' Display the values of the array.
Console.WriteLine("After resizing to a larger size, ")
Console.WriteLine("the string array contains the following values:")
PrintIndexAndValues(myArr)
' Resize the array to a smaller size (four elements).
Array.Resize(myArr, 4)
' Display the values of the array.
Console.WriteLine("After resizing to a smaller size, ")
Console.WriteLine("the string array contains the following values:")
PrintIndexAndValues(myArr)
End Sub
Public Shared Sub PrintIndexAndValues(myArr() As String)
Dim i As Integer
For i = 0 To myArr.Length - 1
Console.WriteLine(" [{0}] : {1}", i, myArr(i))
Next i
Console.WriteLine()
End Sub
End Class
'This code produces the following output.
'
'The string array initially contains the following values:
' [0] : The
' [1] : quick
' [2] : brown
' [3] : fox
' [4] : jumps
' [5] : over
' [6] : the
' [7] : lazy
' [8] : dog
'
'After resizing to a larger size,
'the string array contains the following values:
' [0] : The
' [1] : quick
' [2] : brown
' [3] : fox
' [4] : jumps
' [5] : over
' [6] : the
' [7] : lazy
' [8] : dog
' [9] :
' [10] :
' [11] :
' [12] :
' [13] :
'
'After resizing to a smaller size,
'the string array contains the following values:
' [0] : The
' [1] : quick
' [2] : brown
' [3] : fox
Uwagi
Ta metoda przydziela nową tablicę o określonym rozmiarze, kopiuje elementy ze starej tablicy do nowej, a następnie zastępuje starą tablicę nową. array
musi być tablicą jednowymiarową.
Jeśli array
jest null
to , ta metoda tworzy nową tablicę o określonym rozmiarze.
Jeśli newSize
wartość jest większa niż Length w starej tablicy, zostanie przydzielona nowa tablica, a wszystkie elementy zostaną skopiowane ze starej tablicy do nowej. Jeśli newSize
wartość jest mniejsza niż Length w przypadku starej tablicy, zostanie przydzielona nowa tablica, a elementy zostaną skopiowane ze starej tablicy do nowej do momentu wypełnienia nowej. Pozostałe elementy w starej tablicy są ignorowane. Jeśli newSize
wartość jest równa Length starej tablicy, ta metoda nic nie robi.
Ta metoda jest operacją O(n
), gdzie n
to newSize
.
Metoda Resize zmienia rozmiar tylko tablicy jednowymiarowej. Klasa Array nie zawiera metody zmiany rozmiaru tablic wielowymiarowych. W tym celu należy podać własny kod lub wywołać metodę specjalnego przeznaczenia w bibliotece innej firmy. Poniższy kod ilustruje jedną z możliwych implementacji metody, która zmienia rozmiar tablicy n wymiarów.
using System;
public class Example
{
public static void Main()
{
int[,] arr = new int[10,2];
for (int n1 = 0; n1 <= arr.GetUpperBound(0); n1++) {
arr[n1, 0] = n1;
arr[n1, 1] = n1 * 2;
}
// Make a 2-D array larger in the first dimension.
arr = (int[,]) ResizeArray(arr, new int[] { 12, 2} );
for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
Console.WriteLine("{0}: {1}, {2}", ctr, arr[ctr, 0], arr[ctr, 1]);
Console.WriteLine();
// Make a 2-D array smaller in the first dimension.
arr = (int[,]) ResizeArray(arr, new int[] { 2, 2} );
for (int ctr = 0; ctr <= arr.GetUpperBound(0); ctr++)
Console.WriteLine("{0}: {1}, {2}", ctr, arr[ctr, 0], arr[ctr, 1]);
}
private static Array ResizeArray(Array arr, int[] newSizes)
{
if (newSizes.Length != arr.Rank)
throw new ArgumentException("arr must have the same number of dimensions " +
"as there are elements in newSizes", "newSizes");
var temp = Array.CreateInstance(arr.GetType().GetElementType(), newSizes);
int length = arr.Length <= temp.Length ? arr.Length : temp.Length;
Array.ConstrainedCopy(arr, 0, temp, 0, length);
return temp;
}
}
// The example displays the following output:
// 0: 0, 0
// 1: 1, 2
// 2: 2, 4
// 3: 3, 6
// 4: 4, 8
// 5: 5, 10
// 6: 6, 12
// 7: 7, 14
// 8: 8, 16
// 9: 9, 18
// 10: 0, 0
// 11: 0, 0
//
// 0: 0, 0
// 1: 1, 2
open System
let resizeArray (arr: Array) (newSizes: int []) =
if newSizes.Length <> arr.Rank then
invalidArg "newSizes" "arr must have the same number of dimensions as there are elements in newSizes"
let temp = Array.CreateInstance(arr.GetType().GetElementType(), newSizes)
let length = min arr.Length temp.Length
Array.ConstrainedCopy(arr, 0, temp, 0, length)
temp
[<EntryPoint>]
let main _ =
let arr = Array2D.init 10 2 (fun x y -> if y = 0 then x else x * 2)
// Make a 2-D array larger in the first dimension.
let arr = resizeArray arr [| 12; 2 |]
for i = 0 to arr.GetUpperBound 0 do
printfn $"{i}: {arr.GetValue(i, 0)}, {arr.GetValue(i, 1)}"
printfn ""
// Make a 2-D array smaller in the first dimension.
let arr = resizeArray arr [| 2; 2|]
for i = 0 to arr.GetUpperBound 0 do
printfn $"{i}: {arr.GetValue(i, 0)}, {arr.GetValue(i, 1)}"
0
// The example displays the following output:
// 0: 0, 0
// 1: 1, 2
// 2: 2, 4
// 3: 3, 6
// 4: 4, 8
// 5: 5, 10
// 6: 6, 12
// 7: 7, 14
// 8: 8, 16
// 9: 9, 18
// 10: 0, 0
// 11: 0, 0
//
// 0: 0, 0
// 1: 1, 2
Module Example
Public Sub Main()
Dim arr(9, 1) As Integer
For n1 As Integer = 0 To arr.GetUpperBound(0)
arr(n1, 0) = n1
arr(n1, 1) = n1 * 2
Next
' Make a 2-D array larger in the first dimension.
arr = CType(ResizeArray(arr, { 12, 2} ), Integer(,))
For ctr = 0 To arr.GetUpperBound(0)
Console.WriteLine("{0}: {1}, {2}", ctr, arr(ctr, 0), arr(ctr, 1))
Next
Console.WriteLine()
' Make a 2-D array smaller in the first dimension.
arr = CType(ResizeArray(arr, { 2, 2} ), Integer(,))
For ctr = 0 To arr.GetUpperBound(0)
Console.WriteLine("{0}: {1}, {2}", ctr, arr(ctr, 0), arr(ctr, 1))
Next
End Sub
Private Function ResizeArray(arr As Array, newSizes() As Integer) As Array
If newSizes.Length <> arr.Rank Then
Throw New ArgumentException("arr must have the same number of dimensions " +
"as there are elements in newSizes", "newSizes")
End If
Dim temp As Array = Array.CreateInstance(arr.GetType().GetElementType(), newSizes)
Dim length As Integer = If(arr.Length <= temp.Length, arr.Length, temp.Length )
Array.ConstrainedCopy(arr, 0, temp, 0, length)
Return temp
End Function
End Module
' The example displays the following output:
' 0: 0, 0
' 1: 1, 2
' 2: 2, 4
' 3: 3, 6
' 4: 4, 8
' 5: 5, 10
' 6: 6, 12
' 7: 7, 14
' 8: 8, 16
' 9: 9, 18
' 10: 0, 0
' 11: 0, 0
'
' 0: 0, 0
' 1: 1, 2