可変長配列(動的配列)のサンプルです。
C++のSTLでいうところのlistのようなものです。
実行時に配列のサイズが変化するようなデータを格納します。
サンプルソースはコンソールアプリです。
System.Collections.ArrayList
を利用します。
サンプルでは利用していない機能も色々あるので
ヘルプやMSDNを参考にしてみてください。
C#
using System;
using System.Collections;
namespace ArrayList_test
{
/// <summary>
/// Class1 の概要の説明です。
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
// 空っぽのArrayListを用意
ArrayList alData = new ArrayList();
// ArrayListの末尾に要素を追加
// 追加するものはobjectなので数値でも文字列でも何でもOK
alData.Add( 10 );
alData.Add( "C" );
alData.Add( "B" );
alData.Add( "A" );
// 指定インデックス位置へ挿入(インデックスは0スタート)
alData.Insert( 0, "insert" );
// 指定objectを検索し、そのインデックスを返す
Console.WriteLine( "Aのインデックス={0}", alData.IndexOf( "A" ) );
// インデックス2の要素を出力
Console.WriteLine( "インデックス2の要素={0}", alData[2].ToString() );
// 指定objectが存在するか調べる
if ( !alData.Contains( "D" ) )
Console.WriteLine( "Dは存在しません" );
// 指定要素を削除する
alData.Remove( 10 );
// 指定インデックスの要素を削除する
alData.RemoveAt( 0 );
// 要素数を返す
Console.WriteLine( "alDataの要素数={0}", alData.Count );
// 要素の並べ替え
alData.Sort();
// ArrayListを複製する
ArrayList alClone = (ArrayList)alData.Clone();
// 全要素を順に出力
Console.WriteLine( "全要素を出力↓" );
foreach( object obj in alClone )
{
Console.WriteLine( obj.ToString() );
}
}
}
}
VB.NET
Module Module1
Sub Main()
' 空っぽのArrayListを用意
Dim alData As ArrayList = New ArrayList
' ArrayListの末尾に要素を追加
' 追加するものはobjectなので数値でも文字列でも何でもOK
alData.Add(10)
alData.Add("C")
alData.Add("B")
alData.Add("A")
' 指定インデックス位置へ挿入(インデックスは0スタート)
alData.Insert(0, "insert")
' 指定objectを検索し、そのインデックスを返す
Console.WriteLine("Aのインデックス={0}", alData.IndexOf("A"))
' インデックス2の要素を出力
Console.WriteLine("インデックス2の要素={0}", alData(2).ToString())
' 指定objectが存在するか調べる
If (Not alData.Contains("D")) Then
Console.WriteLine("Dは存在しません")
End If
' 指定要素を削除する
alData.Remove(10)
' 指定インデックスの要素を削除する
alData.RemoveAt(0)
' 要素数を返す
Console.WriteLine("alDataの要素数={0}", alData.Count)
' 要素の並べ替え
alData.Sort()
' ArrayListを複製する
Dim alClone As ArrayList = alData.Clone()
' 全要素を順に出力
Console.WriteLine("全要素を出力↓")
For Each obj As Object In alData
Console.WriteLine(obj.ToString())
Next
End Sub
End Module
VC.NET
#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;
using namespace System::Collections;
int _tmain()
{
// 空っぽのArrayListを用意
ArrayList *alData = new ArrayList();
// ArrayListの末尾に要素を追加
// 追加するものはobjectなので数値でも文字列でも何でもOK
alData->Add( __box(10) ); // 値の型をボックス化しないとコンパイルエラー
// System::Object *obj = __box(10); // 下のように書くこともできるけど上が楽なので省略
// alData->Add( obj );
alData->Add( S"C" );
alData->Add( S"B" );
alData->Add( S"A" );
// 指定インデックス位置へ挿入(インデックスは0スタート)
alData->Insert( 0, S"insert" );
// 指定objectを検索し、そのインデックスを返す
Console::WriteLine( S"Aのインデックス={0}", __box(alData->IndexOf( S"A" )) );
// インデックス2の要素を出力
Console::WriteLine( S"インデックス2の要素={0}", alData->get_Item(2)->ToString() );
// 指定objectが存在するか調べる
if ( !alData->Contains( S"D" ) )
Console::WriteLine( S"Dは存在しません" );
// 指定要素を削除する
alData->Remove( __box(10) );
// 指定インデックスの要素を削除する
alData->RemoveAt( 0 );
// 要素数を返す
Console::WriteLine( S"alDataの要素数={0}", __box(alData->Count) );
// 要素の並べ替え
alData->Sort();
// ArrayListを複製する
ArrayList *alClone = dynamic_cast<ArrayList*>(alData->Clone());
// 全要素を順に出力
Console::WriteLine( S"全要素を出力↓" );
System::Collections::IEnumerator* emu = alClone->GetEnumerator();
while ( emu->MoveNext() )
Console::Write( "{0}\r\n", emu->Current );
return 0;
}
【実行結果】
Aのインデックス=4
インデックス2の要素=C
Dは存在しません
alDataの要素数=3
全要素を出力↓
A
B
C