どうも、ちょげ(@chogetarou)です。
2つの配列(Array)を結合する方法を紹介します。
方法

2つの配列(Array)を結合する方法は、6つあります。
Concat() + ToArray()
1つ目は、Concat()とToArray()を使う方法です。
まず、Linqを導入します。
using System.Linq;
次に、片方の配列(結合した時に先頭にする方)からConcat()メソッドを呼び出します。
Concat()メソッドの引数に、もう片方の配列(結合した時に後ろにする方)を指定します。
そして、Concat()メソッドからToArray()を呼び出します。
//firstとsecondを結合
T[] result = first.Concat(second).ToArray();
上記のConcat()メソッドは、呼び出した配列の後ろに、引数の配列を結合します。
Concatメソッドで結合した結果をToArray()で配列に変換し、2つの配列を結合した新しい配列を生成します。
使用例
using System;
using System.Linq;
public class Example
{
public static void Main()
{
int[] nums1 = new int[3] { 1, 2, 3};
int[] nums2 = new int[3] { 4, 5, 6};
int[] result = nums1.Concat(nums2).ToArray();
foreach (var i in result)
{
Console.WriteLine(i);
}
}
}

CopyTo()
2つ目は、CopyTo()を使う方法です。
まず、結合した配列を保持する変数を用意します。
変数の配列の長さに、2つの配列のLengthプロパティの合計値を指定します。
T[] result = new T[first.Length + second.Length];
次に、片方の配列(結合した時に先頭にする方)からCopyTo()メソッドを呼び出します。
CopyTo()メソッドの第1引数に用意した変数、第2引数に「0」を指定します。
fist.CopyTo(result, 0);
そして、もう片方の配列(結合した時に後ろにする方)からCopyTo()メソッドを呼び出します。
CopyTo()メソッドの第1引数に用意した変数、第2引数に先頭の配列のLengthプロパティを指定します。
second.CopyTo(result, first.Length);
ここまでの処理で、用意した変数の配列に、2つの配列を結合した配列が格納されます。
使用例
using System;
public class Example
{
public static void Main()
{
int[] nums1 = new int[3] { 1, 2, 3};
int[] nums2 = new int[3] { 4, 5, 6};
int[] result = new int[nums1.Length + nums2.Length];
nums1.CopyTo(result, 0);
nums2.CopyTo(result, nums1.Length);
foreach (var i in result)
{
Console.WriteLine(i);
}
}
}

ListのAddRange()メソッド
3つ目は、ListのAddRange()メソッドを使う方法です。
2つの配列(Array)をListのAddRange()メソッドで結合するには、List()の引数とToArray()を使います。
まず、System.Collections.Genericを導入し、Listの変数を用意します。
Listをインスタンス化する際に、引数に結合する片方の配列を指定します。
using System.Collections.Generic;
List<T> list = new List<T>(first);
次に、Listの変数からAddRange()を呼び出します。
AddRange()の引数に、結合するもう片方の配列を指定します。
list.AddRange(second);
そして、ListからToArray()を呼び出した、ToArray()の戻り値を配列の変数に代入します。
T[] result = list.ToArray();
ここまでの処理で、上記の配列の変数に、2つの配列を結合した配列が格納されます。
使用例
using System;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
int[] nums1 = new int[3] { 1, 2, 3};
int[] nums2 = new int[3] { 4, 5, 6};
List<int> list = new List<int>(nums1);
list.AddRange(nums2);
int[] result = list.ToArray();
foreach (var i in result)
{
Console.WriteLine(i);
}
}
}
Array.Copy()

Array.Resize() + CopyTo()メソッド
5つ目は、Array.Resize()とCopyTo()メソッドを使う方法です。
まず、Array.Resize()を呼び出します。
Array.Resize()の第1引数に結合する片方の配列の参照、第2引数に2つの配列のLengthプロパティの合計値を指定します。
Array.Resize(ref first, first.Length + second.Length);
そして、結合するもう片方の配列からCopyTo()メソッドを呼び出します。
CopyTo()メソッドの第1引数にArray.Resize()の第1引数に指定した配列、第2引数に2つの配列のLengthプロパティの差を指定します。
second.CopyTo(first, first.Length - second.Length);
ここまでの処理で、Array.Resize()の第1引数に指定した配列に、CopyTo()を呼び出した配列が結合されます。
使用例
using System;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
int[] nums1 = new int[3] { 1, 2, 3};
int[] nums2 = new int[3] { 4, 5, 6};
Array.Resize<int>(ref nums1, nums1.Length + nums2.Length);
nums2.CopyTo(nums1, nums1.Length - nums2.Length);
foreach (var i in nums1)
{
Console.WriteLine(i);
}
}
}

Array.Resize() + Array.Copy()
6つ目は、Array.Resize()とArray.Copy()を使う方法です。
まず、Array.Resize()を呼び出します。
Array.Resize()の第1引数に結合する片方の配列の参照、第2引数に2つの配列のLengthプロパティの合計値を指定します。
Array.Resize(ref first, first.Length + second.Length);
そして、Array.Copy()を呼び出します。
Array.Copy()の5つの引数に以下の値を指定します。
- 第1引数:結合するもう片方の配列
- 第2引数:0
- 第3引数:Array.Resize()の第1引数に指定した配列
- 第4引数:2つの配列のLengthプロパティの差
- 第5引数:第1引数に指定した配列のLengthプロパティ
Array.Copy(second, 0, fist, first.Length - second.Length, second.Length);
ここまでの処理で、Array.Resize()の第1引数に指定した配列に、Array.Copy()の第1引数に指定した配列が結合されます。
使用例
using System;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
int[] nums1 = new int[3] { 1, 2, 3};
int[] nums2 = new int[3] { 4, 5, 6};
Array.Resize(ref nums1, nums1.Length + nums2.Length);
Array.Copy(nums2, 0, nums1, first.Length - second.Length, second.Length);
foreach (var i in nums1)
{
Console.WriteLine(i);
}
}
}
まとめ
List(リスト)を降順にソートする方法は、次の6つです。
- Concat()とToArray()を使う方法
- CopyTo()を使う方法
- ListのAddRange()を使う方法
- Array.Copy()を使う方法
- Array.Resize()とCopyTo()メソッドを使う方法
- Array.Resize()とArray.Copy()を使う方法
コメント