[C#]2つの配列(Array)を結合するには?

C#

どうも、ちょげ(@chogetarou)です。

2つの配列(Array)を結合する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

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つの配列を結合した新しい配列を生成します。

Concat()メソッドは、呼び出した配列に影響を与えません。

使用例

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つの配列を結合した配列が格納されます。

処理をまとめたコードは、以下のようになります。

T[] result = new T[first.Length + second.Length];

fist.CopyTo(result, 0);

second.CopyTo(result, first.Length);

使用例

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つの配列を結合した配列が格納されます。

処理をまとめたコードは、以下のようになります。

List<T> list = new List<T>(first);
list.AddRange(second);
T[] result = list.ToArray();

使用例

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()を呼び出した配列が結合されます。

処理をまとめたコードは、以下のようになります。

Array.Resize(ref first, first.Length + second.Length);
second.CopyTo(first, first.Length - second.Length);

使用例

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引数に指定した配列が結合されます。

処理をまとめたコードは、以下のようになります。

Array.Resize(ref first, first.Length + second.Length);
Array.Copy(second, 0, fist, first.Length - second.Length, second.Length);

使用例

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()を使う方法

コメント

タイトルとURLをコピーしました