1. ActionScript / Говнокод #491

    −364

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    public static function cleanArray(a:Array):void
    { 
      var size:Number = new Number(a.length);
      for (var i:int = 0; i < size; ++i)
      {
        a.pop();
      }
    }

    очистка массива

    Запостил: guest, 02 Февраля 2009

    Комментарии (19) RSS

    • Pavel:
      Лошки, хуле
      Ответить
    • Mikle:
      хм. Не понимаю, зачем использовать Pop??? нельзя обнулить массив или просто удалить и создать новый?
      Ответить
      • Потому что массив передается в функцию, а метода такого «очистить» просто нет у массива
        Ответить
        • a.length = 0;
          Ответить
          • a.length — это свойство только для чтения (во всяком случае в haXe это так, что скорей всего и в самой реализации AVM2 так же)
            Ответить
            • попробуй:
              var arr:Array = [1, 2, 3];
              trace(arr.length);
              arr.length = 0;
              trace(arr.length);
              Ответить
              • в haXe именно только чтение, как в флеше проверить не имею возможности. У меня компилятор ругается при попытке такое произвести.
                Ответить
                • Тестил:
                  var arr:Array = [1, 2, 3];
                  trace(arr.length);//3
                  arr.length = 0;
                  trace(arr.length);//0
                  trace(arr);//ничего соответсвенно
                  но можно ведь к свойству не обращаться, мона просто arr=[];
                  так что...
                  Ответить
      • а вот «new Number(a.length)» — это перебор
        Ответить
      • Нельзя чистить массив методом array = []; (выделяется новая память). Попробуйте 100 крупных массивов занулить таким образом.

        Чистить do { array.pop() } while(array.length > 0)
        Ответить
    • В данном случае new Number в цикле - это пиндык. А если у меня 10000 элементов в массиве? Флеш 10 тыщ раз выделит память для создания экземпляра класса Number.
      Ответить
    • Это вы пиндык.
      arr.splice(0,arr.length);

      Но всё таки лучше arr=[], GC сделает остальное.
      Ответить
      • Нихрена это не лучше - теряете ссылки сразу же.
        Ответить
      • Первый вариант тоже убог.

        Только arr.length=0 и больше никак.
        Ответить
    • a.splice(0,a.length)
      Ответить
    • Может он передает расширенный класс от Array, и оверрайден метод pop?! KianuFrustratedFace.jpeg
      Ответить

    Добавить комментарий