我想拥有一个对象集合,这些对象将是我创建的一个名为Server的类。服务器有一个字符串属性,它是它的IP地址,以及许多其他数据和对象。
我将有方法为此集合添加和删除服务器,并且需要偶尔通过它的IP地址查找服务器。如果我在C#中这样做,我会使用Dictionary<其中IP字符串是键,而Server对象是值。在尝试添加项目之前,我可以轻松检查字典中是否存在项目。
所以我的要求是: 1.能够将物品添加到集合中(我不关心他们去哪里,正面,背面,中间) 2.能够从集合中的任何位置删除项目。 3.能够确定集合中是否已存在特定IP地址。 4.能够通过IP获取对Server对象的引用。 编辑:哦,是的,我希望它像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 :(得分:3)
叫我高飞,但为什么不使用Dictionary课?除了强力打字之外,它可以为您提供一切。
如果你想要强类型,那么我会说你需要一个自定义容器,它包含一个Vector of Servers,以及一个索引到Vector的字典或关联的IP字符串数组。然后,您需要公开访问,测试,插入和删除的方法。
答案 1 :(得分:-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并没有内置的Dictionary类。