2009-08-08 2 views
2

私は、サーバーと呼ばれるクラスのオブジェクトのコレクションを持っています。サーバーには文字列プロパティがあり、そのIPアドレスだけでなく、他の多くのデータやオブジェクトもあります。ActionScript 3のC#の汎用辞書の類義語は何ですか?

このコレクションにサーバーを追加したり削除したりする方法があります。そのIPアドレスでサーバーを見つける必要があることがあります。もし私がC#でこれをやっていたら、辞書<を使います。ここでIP文字列がキーになり、Serverオブジェクトがその値になります。私はそれを追加しようとする前に、アイテムが辞書に存在するかどうかを簡単に確認することができます。

私の要件は以下の通りです。 1.コレクションにアイテムを追加する機能(前面、背面、中央のどこに行っても構わない)2.コレクションのどこからでもアイテムを削除する機能。 3.特定のIPアドレスがコレクションに既に存在するかどうかを判断する機能。 4. Serverオブジェクトへの参照をIPで取得する機能。 編集:ああ、私はVectorのように厳密に型付けされたいと思っています...私はそれが絶対に必要ではないと思いますが、いいと思います。

それで、連想配列が私に必要なものを与えてくれるように思えますが、#3や#4のやり方についてはわかりません。

public var Servers:Object = new Object(); 

public function AddServer(server:Server):void 
{ 
    //TODO:need to check if it exists first and throw an error if so 
    //(it's the caller's responsibility to call DoesServerExist first) 

    Servers[server.IP] = server; 
} 


public function RemoveServer(IP:string):void 
{ 
    //is it OK to attempt to delete an item if it doesn't already exist? 
    //do I need to check if it exists before doing delete? 
    delete Servers[IP]; 
} 

public function DoesServerExist(IP:string):bool 
{ 
    //Do I loop through all the elements testing it's IP property? 
    //Or can I just do something like this? 
    if(Servers[IP] == null) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 

public function GetServer(IP:string):Server 
{ 
    return Servers[IP];//what is returned if this IP doesn't exist? 
} 
+0

個人的に私はintsとしてIPアドレスを保存します... 32ビットは有効なIPです... "123.456.789.876"は...デザインに関して、私はその変数をプライベート/プロテクトにします...慣習では、UpperCamelCaseはas3のクラス用に予約されていますが、完全に主観的ですが、いくつかのコラボレーションを開始する予定がある場合は、おそらくそれに慣れたいと考えています... – back2dos

+0

あなたが見たいかもしれませんhaxe実際には(haxe.org)...ジェネリックスをサポートしています...ハッシュと一緒に行くことができます。それ以外にも、素晴らしい、若くて有望な言語です... – back2dos

答えて

3

goofyと呼んでいますが、Dictionaryクラスを使用しないのはなぜですか?それはあなたに強いタイピング以外のすべてをもたらします。

強力な型付けが必要な場合は、サーバーのVectorをラップするカスタムコンテナと、Vectorにインデックスを付けるIP文字列の辞書または連想配列が必要とされます。次に、アクセス、テスト、挿入、削除のためのメソッドを公開する必要があります。

+1

クラス内の検索辞書を隠し、add(ip:String、サーバー:サーバー):void、remove(IP:String):サーバーとget(IP:String):サーバー... greetz – back2dos

-3

アレイを使用できます。例:

var dict:Array = []; 
var ip = "164.157.012.122" 
dict[ip] = "Server name" 

if (dict[ip] == "Server name"){ 
    trace("Yay"); 
} 

//membership 
if (dict[ip]){ 
    trace(ip + " is a member of dict"); 
} else { 
    trace (ip + " is not a member"); 
} 

//removal: 
dict[ip] = null; 

AS3には、残念なことに組み込みのクラスがありません。

+0

メンバーシップテストコードありがとう。 なぜ私はあなたが配列を使用することを選択したのか混乱しています。文字列インデックスに配列を使用しないという文書が表示されるのはなぜですか?彼らは、配列関数のどれも動作するとは言いません、そして、連想配列のオブジェクトを使用するだけではありません。 – AaronLS

+0

あなたは正しいです、配列とオブジェクトの間に本当の違いはありません...私はちょうど癖の1つを使用しました。いくつかの配列関数が必要な場合は、このようなものを使用することをお勧めします(http://code.ericfeminella.com/classes/as3/HashMap.as.html)。 – thedayturns

+1

1. AS3には辞書クラスがあります。 2. delete演算子で正しい削除が行われ、キーが実際に消えたので、for-inループですべてのキーを取得できます。 3.正しい検索はdict.hasOwnProperty(id) – back2dos

関連する問題