C#の配列活用ガイド:共通要素の検索・動的配列・ジャグ配列の実践コード例
配列は、複数のデータをまとめて格納するための基本的なデータ構造です。メモリ上に連続した領域として確保され、インデックスを使って各要素へ高速にアクセスできるのが特徴です。
この記事では、C#における配列の代表的な使い方として、以下の3つの実践的なサンプルコードを紹介します。
- 3つのソート済み配列から共通要素を見つける方法
- ArrayListを使った動的な配列の作成方法
- ジャグ配列(配列の配列)の宣言と要素へのアクセス方法
1. 3つのソート済み配列から共通要素を見つける
すでに昇順にソートされた3つの配列がある場合、3つのポインタ(インデックス)を同時に進めることで、効率よく共通要素を抽出できます。値が一致すれば出力し、一致しなければ最も小さい値を持つ配列のインデックスを進めていくのがポイントです。
using System;
class Demo {
static void commonElements(int []one, int []two, int []three) {
int i = 0, j = 0, k = 0;
while (i < one.Length && j < two.Length && k < three.Length) {
if (one[i] == two[j] && two[j] == three[k]) {
Console.Write(one[i] + " ");
i++;j++;k++;
}
else if (one[i] < two[j])
i++;
else if (two[j] < three[k])
j++;
else
k++;
}
}
public static void Main() {
int []one = {20, 35, 57, 70};
int []two = {9, 35, 57, 70, 92};
int []three = {25, 35, 55, 57, 67, 70};
Console.Write("共通要素: ");
commonElements(one, two, three);
}
}このプログラムを実行すると、3つの配列すべてに存在する「35」「57」「70」が出力されます。計算量はO(n)程度に抑えられるため、大規模なデータでも高速に処理できます。
2. ArrayListで配列を動的に作成する
通常の配列はサイズが固定ですが、ArrayListを使えば要素数を気にせず動的に追加できます。Add()メソッドで要素を追加し、Countプロパティで現在の要素数を取得できます。
using System;
using System.Collections;
namespace CollectionApplication {
class Program {
static void Main(string[] args) {
ArrayList al = new ArrayList();
al.Add(99);
al.Add(47);
al.Add(64);
Console.WriteLine("要素数: {0}", al.Count);
Console.Write("リスト内容: ");
foreach (int i in al) {
Console.Write(i + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
}このコードでは、3つの整数を追加した後、要素数「3」とリストの中身「99 47 64」が表示されます。なお、現代のC#開発では型安全なList<T>の使用が推奨される点にも注意しましょう。
3. ジャグ配列の作成と要素へのアクセス
ジャグ配列(Jagged Array)とは、「配列の配列」のことで、各行ごとに異なる長さの配列を持てる柔軟な構造です。二次元配列と似ていますが、より自由な形状のデータを扱えます。
using System;
namespace ArrayApplication {
class MyArray {
static void Main(string[] args) {
int[][] points = new int[][]{new int[]{10,5},new int[]{30,40}, new int[]{70,80},new int[]{ 60, 70 }};
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
Console.WriteLine("a[{0}][{1}] = {2}", i, j, points[i][j]);
}
}
// 要素へのアクセス
int x = points[0][1];
Console.WriteLine(x);
Console.ReadKey();
}
}
}この例では、4行×2列のジャグ配列を作成し、二重ループで各要素を出力しています。また、points[0][1]のように2段階のインデックス指定で特定の要素に直接アクセスでき、この場合は「5」が出力されます。
まとめ
C#の配列は、単純な固定長配列から、動的に拡張できるArrayList、柔軟な形状を持つジャグ配列まで、用途に応じてさまざまな形で活用できます。それぞれの特性を理解して使い分けることで、より効率的で読みやすいコードを書くことができます。
-
C#の名前空間(namespace)とは?定義方法と基本的な使い方を解説
名前空間とは名前空間(namespace)とは、ある一連の名前を別の一連の名前から分離して管理するための仕組みです。大規模なプロジェクトでは、複数の開発者が同じ名前のクラスやメソッドを作成することがあり、名前の衝突(コンフリクト)が発生する可能性があります。名前空間を使うことで、こうした衝突を防ぎ、コードを論理的に整理できます。また、.NET Framework が提供する System なども名前空間の一つであり、標準ライブラリの機能はすべて名前空間によって分類・管理されています。名前空間の定義方法名前空間の定義は、namespace キーワードで始まり、その後に名前空間名を続けて記述します
-
C#のArrayクラスのプロパティとは?主要プロパティと使い方を解説
C#におけるArrayクラスは、すべての配列の基底クラスであり、System名前空間で定義されています。このクラスには、配列のサイズや読み取り専用かどうか、次元数などの情報を取得するための便利なプロパティが多数用意されています。Arrayクラスの主なプロパティ一覧No.プロパティと説明1IsFixedSize配列が固定サイズであるかどうかを示す値を取得します。2IsReadOnly配列が読み取り専用であるかどうかを示す値を取得します。3Length配列のすべての次元に含まれる要素の総数を、32ビット整数(int)として取得します。4LongLength配列のすべての次元に含まれる要素の総数を、