Array.Resize<T>(T[], Int32) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
1 次元配列の要素数を、指定した新しいサイズに変更します。
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)
型パラメーター
- T
配列要素の型。
パラメーター
- array
- T[]
サイズ変更の対象となる、インデックス番号が 0 から始まる 1 次元配列。指定したサイズの新しい配列を作成する場合は null
。
- newSize
- Int32
新しい配列のサイズ。
例外
newSize
が 0 未満です。
例
次の例は、サイズ変更が配列に与える影響を示しています。
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
注釈
このメソッドは、指定したサイズの新しい配列を割り当て、古い配列から新しい配列に要素をコピーし、古い配列を新しい配列に置き換えます。 array
は 1 次元配列である必要があります。
ある場合 array
、このメソッドは null
、指定したサイズの新しい配列を作成します。
古い配列よりもLength大きい場合newSize
は、新しい配列が割り当てられ、すべての要素が古い配列から新しい配列にコピーされます。 古い配列よりLength小さい場合newSize
は、新しい配列が割り当てられ、新しい配列が塗りつぶされるまで古い配列から新しい配列に要素がコピーされます。古い配列の残りの要素は無視されます。 古い配列と等しいLength場合newSize
、このメソッドは何も行いません。
このメソッドは O(n
) 操作です。n
は newSize
です。
このメソッドは Resize 、1 次元配列のサイズのみを変更します。 このクラスには Array 、多次元配列のサイズを変更するためのメソッドは含まれません。 これを行うには、独自のコードを指定するか、サードパーティライブラリで特別な目的のメソッドを呼び出す必要があります。 次のコードは、 n 次元の配列のサイズを変更するメソッドに対して可能な実装の 1 つを示しています。
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