Что является эквивалентом универсального словаря C # в ActionScript 3? - PullRequest
2 голосов
/ 08 августа 2009

Я хочу иметь коллекцию объектов, которые будут из класса, который я создал, под названием Сервер. Сервер имеет строковое свойство, которым является его IP-адрес, а также множество других элементов данных и объектов.

У меня будут методы для добавления и удаления серверов в эту коллекцию, и время от времени будет необходимо находить сервер по его IP-адресу. Если бы я делал это в C #, я бы использовал Dictionary <, где IP-строка была бы ключом, а объект Server был бы значением. Я мог легко проверить, существует ли элемент в Словаре, прежде чем пытаться добавить его. </p>

Итак, мои требования: 1. Возможность добавлять предметы в коллекцию (мне все равно, куда они идут: спереди, сзади, посередине) 2. Возможность удалять предметы из любой точки коллекции. 3. Возможность определить, существует ли конкретный IP-адрес в коллекции. 4. Возможность получить ссылку на объект Сервера по его IP. Редактировать: О да, я хотел бы, чтобы он был строго напечатан, как Вектор ... Я думаю, это не совсем необходимо, но было бы неплохо.

Похоже, ассоциативные массивы дадут мне то, что мне нужно, за исключением того, что я не уверен, как это сделать # 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?
}

Ответы [ 2 ]

3 голосов
/ 08 августа 2009

Назовите меня глупым, но почему бы не использовать класс Dictionary ? Это дает вам все, кроме строгой печати. ​​

Если вы хотите строгую типизацию, я бы сказал, что вам нужен пользовательский контейнер, который включает в себя Вектор серверов, и Словарь или ассоциативный массив IP-строк, которые индексируются в Вектор. Тогда вам нужно будет предоставить методы для доступа, тестирования, вставки и удаления.

0 голосов
/ 08 августа 2009

Вы можете просто использовать массив. Пример:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...