.NET C#,VB.NET,VC.NET
■Hashtable 連想配列
連想配列のサンプルです。
C++のSTLでいうところのmapのようなものです。
キーと、それと対になる値とをペアで記憶します。
サンプルソースはコンソールアプリです。
System.Collections.Hashtable
を利用します。
C#
using System;
using System.Collections;
namespace Hashtable_test
{
/// <summary>
/// Class1 の概要の説明です。
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
// hashtableを作ります
Hashtable hash = new Hashtable();
// キーと値をペアで幾つか格納します
hash.Add( "A", 10 ); // Addメソッドで追加
hash["B"] = 20; // インデクサで追加
hash["C"] = 30; // インデクサで追加
// キーの重複は許されないので下記は失敗します。
try
{
hash.Add( "A", 0 );
}
catch( ArgumentException )
{
Console.WriteLine( "キーの重複は許されません\r\n" );
}
// インデクサを使って値を書き換え可能です。
hash["A"] = 0;
// キーを指定してペアを削除
hash.Remove( "B" );
// キーが見つからなければnullを返す
Console.WriteLine( "B={0}\r\n", hash["B"] );
// 特定のキーの存在を確認
if ( hash.ContainsKey("A") )
Console.WriteLine( "key A は存在します。\r\n" );
// 特定の値の存在を確認
if ( hash.ContainsValue(0) )
Console.WriteLine( "value 0 は存在します。\r\n" );
// キーと値のペアをすべて出力
foreach( object key in hash.Keys )
{
Console.WriteLine( "key={0} key-type={1} / value={2} value-type={3}",
key,
key.GetType(),
hash[key],
hash[key].GetType() );
}
}
}
}
VB.NET
Module Module1
Sub Main()
'hashtableを作ります
Dim hash As System.Collections.Hashtable = New System.Collections.Hashtable
'キーと値をペアで幾つか格納します
hash.Add("A", 10) 'Addメソッドで追加
hash("B") = 20 '配列に代入する要領で追加
hash("C") = 30 '配列に代入する要領で追加
'キーの重複は許されないので下記は失敗します。
Try
hash.Add("A", 0)
Catch
Console.WriteLine("キーの重複は許されません" + ControlChars.CrLf)
End Try
'配列に代入する要領で値を書き換え可能
hash("A") = 0
'キーを指定してペアを削除
hash.Remove("B")
'キーが見つからなければnullを返す
Console.WriteLine("B={0}" + ControlChars.CrLf, hash("B"))
'特定のキーの存在を確認
If hash.ContainsKey("A") Then
Console.WriteLine("key A は存在します。" + ControlChars.CrLf)
End If
'特定の値の存在を確認
If hash.ContainsValue(0) Then
Console.WriteLine("value 0 は存在します。" + ControlChars.CrLf)
End If
'キーと値のペアをすべて出力
For Each key As Object In hash.Keys
Console.WriteLine("key={0} key-type={1} / value={2} value-type={3}", _
key, _
key.GetType(), _
hash(key), _
hash(key).GetType())
Next
End Sub
End Module
VC.NET
#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;
using namespace System::Collections;
int _tmain()
{
// hashtableを作ります
Hashtable *hash = new Hashtable();
// キーと値をペアで幾つか格納します
hash->Add( S"A", __box(10) ); // 値はボックス化しないとコンパイルエラー
hash->Add( S"B", __box(20) );
hash->Add( S"C", __box(30) );
// キーの重複は許されないので下記は失敗します。
try
{
hash->Add( S"A", __box(10) );
}
catch( ArgumentException* )
{
Console::WriteLine( S"キーの重複は許されません\r\n" );
}
// 値を書き換え可能です。
hash->set_Item(S"A", __box(0));
// キーを指定してペアを削除
hash->Remove( S"B" );
// キーが見つからなければnullを返す
Console::WriteLine( S"B={0}\r\n", hash->get_Item(S"B") );
// 特定のキーの存在を確認
if ( hash->ContainsKey(S"A") )
Console::WriteLine( S"key A は存在します。\r\n" );
// 特定の値の存在を確認
if ( hash->ContainsValue(__box(0)) )
Console::WriteLine( S"value 0 は存在します。\r\n" );
// キーと値のペアをすべて出力
IDictionaryEnumerator __gc *emu = hash->GetEnumerator();
while (emu->MoveNext())
{
Console::WriteLine(S"key={0} key-type={1} / value={2} value-type={3}",
emu->Key,
emu->Key->GetType(),
emu->Value,
emu->Value->GetType() );
}
return 0;
}
【実行結果】
キーの重複は許されません
B=
key A は存在します。
value 0 は存在します。
key=C key-type=System.String / value=30 value-type=System.Int32
key=A key-type=System.String / value=0 value-type=System.Int32
トップ > .NET C#,VB.NET,VC.NET
Copyright (C) 2005.09 〜 By Shougo Suzaki