Словарь () as3 - PullRequest
       0

Словарь () as3

0 голосов
/ 03 ноября 2011

Я использую словарную переменную для сопоставления упражнения с перетаскиванием.

var dict = new Dictionary ();
dict[box_a]=s1;
dict[box_b]=s2;
dict[box_c]=s3;
dict[box_d]=s4;

вопрос 1: в конце я хотел бы проверить, есть ли box_a == с s1 и так далее ...... как бы я это сделал

for each( var item  in dict)
    {   item.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
        item.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
    if(item==????)
// what do i have to put instead of ???
    hits=hits+1;

вопрос 2: Я бы хотел, чтобы box_d также принял s3, как бы я это сделал, если бы я сделал dict [box_d] = s4;и dict [box_d] = s3;это не будет работать, потому что это соответствует ему с последним равным.:( Спасибо !!

Ответы [ 2 ]

5 голосов
/ 03 ноября 2011

Введение

Словарь - это набор ключей / значений, подобный таблице:

+------+--------+
| key1 | value1 |
+------+--------+
| key2 | value2 |
+------+--------+
| key3 | value3 |
+------+--------+
| key4 | value4 |
+------+--------+

Для доступа к значениям вы должны использовать клавиши, т.е.: dict[key2] возвращает value2

Ответ 1:

Вы не можете получить доступ к ключам напрямую, но вы можете использовать оператор for () для доступа к ним, так что:

for (var key:* in dict) {
    trace('dict[' + key + '] = ' + dict[key]);
}

выведет это:

dict[key1] = value1
dict[key2] = value2
dict[key3] = value3
dict[key4] = value4

Вы используете оператор for each (). С этим конкретным утверждением у вас есть другой результат, потому что вы перебираете значения, а не ключи, поэтому это:

for each (var value:* in dict) {
    trace(value);
}

выведет это:

value1
value2
value3
value4

Поэтому, если вы хотите что-то проверить с помощью ключа, вы должны использовать форму for (key in dict).

Ответ 2:

Я рекомендую вам использовать массивы следующим образом:

dict[box_a] = [s1];
dict[box_b] = [s2];
dict[box_c] = [s3];
dict[box_d] = [s3, s4];

, а затем получить доступ к значениям в виде массивов и проверить все значения:

for (var key:* in dict) {
    var values:Array = dict[key];
    for each (var value:* in values) {
        // do what you want with s1, s2, s3, etc
    }
}
0 голосов
/ 03 ноября 2011

похоже, что равенство можно проверить только для примитивных типов, замена оператора == на === ничего не изменит:

        var dict:Dictionary = new Dictionary();
        dict['ololo1'] = { one : 1, two : '2' };
        dict[ { one : 1, two : '2' } ] = function(o:*):String { return o as String; };
        dict[function(o:*):String { return o as String; }] = 'ololo';
        dict['ololo2'] = 'ololo2';
        dict[{ one : 1, two : '2' }] = { one : 1, two : '2' };
        for (var key:* in dict) {
            trace(key, dict[key], key == dict[key]); 
        }
        trace('equal functions :', (function(o:*):String { return o as String; } === 
                                    function(o:*):String { return o as String; } ));
        trace('equal objects :', ({ one : 1, two : '2' } === 
                                  { one : 1, two : '2' } ));
        trace('equal functions :', (function(o:*):String { return o as String; } == 
                                    function(o:*):String { return o as String; } ));
        trace('equal objects :', ({ one : 1, two : '2' } == 
                                  { one : 1, two : '2' } ));

        var obj:Object = { one : 1, two : '2' };
        var obj1:Object = { one : 1, two : '2' };
        var fun:Function = function(o:*):String { return o as String; };
        var fun1:Function = function(o:*):String { return o as String; };
        trace(obj == { one : 1, two : '2' }, 
              obj == obj1,
              fun == function(o:*):String { return o as String; },
              fun == fun1);

выходы

[object Object] [object Object] false
function Function() {} ololo false
[object Object] function Function() {} false
ololo2 ololo2 true
ololo1 [object Object] false
equal functions : false
equal objects : false
equal functions : false
equal objects : false
false false false false

однако obj == obj возвращает true;)

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