C#でStringDictionaryを指定したインデックスの配列にコピーする方法
C#のStringDictionaryクラスには、辞書の内容を配列へコピーできるCopyTo()メソッドが用意されています。このメソッドを使うと、キーと値のペアを1次元配列の任意のインデックス位置から格納できます。
CopyTo()メソッドの基本
CopyTo(Array array, int index)は、StringDictionary内のすべての要素を、指定したインデックス以降の配列要素へ順番にコピーします。コピー先の各要素はDictionaryEntry構造体として格納され、KeyプロパティとValueプロパティでアクセスできます。
例1:インデックス0から配列へコピーする
まずは、配列の先頭(インデックス0)からコピーする基本的な例を見てみましょう。
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main(){
StringDictionary strDict = new StringDictionary();
strDict.Add("1", "SUV");
strDict.Add("2", "AUV");
strDict.Add("3", "Electric Car");
strDict.Add("4", "Utility Vehicle");
strDict.Add("5", "Hatchback");
strDict.Add("6", "Compact car");
strDict.Add("7", "MUV");
strDict.Add("8", "Crossover");
strDict.Add("9", "Covertible");
strDict.Add("10", "Quadricycle");
DictionaryEntry[] arr = { new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry()};
strDict.CopyTo(arr, 0);
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine(arr[i].Key + " " + arr[i].Value);
}
}
}
出力結果
上記のコードを実行すると、次のような出力が得られます。
10 Quadricycle 1 SUV 2 AUV 3 Electric Car 4 Utility Vehicle 5 Hatchback 6 Compact car 7 MUV 8 Crossover 9 Covertible
なお、StringDictionaryは内部的にハッシュテーブルで管理されているため、出力順序は追加した順序とは限りません。要素の並び順が必要な場合は、コピー後にソート処理を行うことをおすすめします。
例2:指定したインデックスからコピーする
次に、第2引数で開始インデックスを指定した例を見てみましょう。ここではインデックス「2」を指定しています。
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main(){
StringDictionary strDict = new StringDictionary();
strDict.Add("1", "SUV");
strDict.Add("2", "AUV");
strDict.Add("3", "Electric Car");
strDict.Add("4", "Utility Vehicle");
strDict.Add("5", "Hatchback");
strDict.Add("6", "Compact car");
DictionaryEntry[] arr = { new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry(),
new DictionaryEntry()};
strDict.CopyTo(arr, 2);
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine(arr[i].Key + " " + arr[i].Value);
}
}
}
出力結果
この場合、配列のインデックス0と1は初期状態(空)のまま残り、要素はインデックス2以降に格納されます。
1 SUV 2 AUV 3 Electric Car 4 Utility Vehicle 5 Hatchback 6 Compact car
まとめ
StringDictionary.CopyTo()メソッドを使えば、辞書の全要素を簡単に配列へ複製できます。第2引数で開始位置を指定できるため、既存の配列の一部だけを辞書の内容で上書きしたい場合にも便利です。コピー先の配列サイズが「開始インデックス+要素数」以上である点に注意して使用しましょう。
-
C#のArray.Copy()メソッドで配列をコピーする方法
C#のArray.Copy()メソッドは、その名の通り、ある配列の要素を別の配列へコピーするために使用されます。forループなどで手動的に要素を移し替えることなく、1行の呼び出しだけで配列間のデータ複製を実現できる、非常に便利なメソッドです。構文Array.Copy(src, dest, length);各パラメータの意味は以下の通りです。src:コピー元となる配列dest:コピー先の配列length:コピーする要素数なお、Array.Copy()メソッドには複数のオーバーロードが用意されており、コピー元・コピー先それぞれの開始インデックスを指定した部分コピーも可能です。ここでは、最も基本的な
-
C#で配列をコピーする方法|Array.Copyメソッドの使い方を解説
C#では、Array.Copyメソッドを使うことで、ある配列の一部(または全体)を別の配列へ簡単にコピーできます。この記事では、Array.Copyメソッドの基本的な使い方を、サンプルコードと実行結果付きでわかりやすく解説します。配列コピーの基本構造まず、コピー元となる元の配列を用意します。ここでは要素数10個の整数型配列を定義します。int[] n = new int[10]; /* n は 10 個の整数を持つ配列 */次に、コピー先となる新しい配列です。こちらは元の配列の一部を格納するため、要素数は5個にします。int[] m = new int[5]; /* m は 5 個の整数を持つ