-
Notifications
You must be signed in to change notification settings - Fork 0
Collections (ru)
Язык Collections разработан для расширения базовых возможностей ActionScript3. Он добавляет функциональность, которая присутствует в современных языках, таких как Scala, Groovy или Ruby. Collections позволяет использовать два типа: List и Map. Map очень похож на Dictionary и содержит ряд полезных методов, которые описаны ниже.
Также есть методы конвертации, весьма полезные для упрощения использования Collections в Ваших текущих pure ActionScript3 проектах. Просто возьмите ваш массив (или вектор) и примените метод .toList. После обработки list Вы всегда можете конвертировать его обратно в old-school AS3 стиль, используя .toArray или .toVector метод.
###Базовые операции с List
- .add( element )
- .addAll( list )
- .addFirst( element )
- .clear
- .contains( element )
- .containsAll( list )
- .copy
- .cut( numberOfElements )
- .distinct
- .first
- .get( index )
- [[.head( index )|Collections-(ru)#wiki-head]]
- .indexOf( element )
- .insert( index, element )
- .isEmpty
- .isNotEmpty
- .join( delimiter )
- .last
- .page( fromElement, toElement )
- .remove( element )
- .removeAll( list )
- .removeAt( index )
- .removeFirst
- .removeHead( length )
- .removeLast
- .removeTail( length )
- .reverse
- .set( index, element )
- .size
- .skip( numberOfElements )
- .subList( fromIndex, toIndex )
- .tail( numberOfElements )
- .toArray
- .toVector
###Бинарные операции с List
###Closures операции с List
- .all( condition( element ) )
- .any( condition( element ) )
- .fill( yield( element ) )
- .findFirst( condition( element ) )
- .findLast( condition( element ) )
- .foldLeft( operation( element ), seed )
- .foldRight( operation( element ), seed )
- .forEach( operation( element ) )
- .reduceLeft( operation( elementA, elementB ) )
- .reduceRight( operation( elementA, elementB ) )
- .removeWhere( condition( element ) )
- .select( operation( element ) )
- .selectMany( operation(element) )
- .sort( operation( elementA, elementB ) )
- .where( condition( element ) )
- ( numberOfTimes ).times( operation(counter ) )
###Closures операции с элементами List
###Базовые операции с Map
- .keys
- .containsKey( key )
- .containsValue( value )
- [[.clear|Collections-(ru)#wiki-clear]
- .putAll( map )
- .removeKey( key )
- .values
##Создание экземпляра Collections
Вы можете создать экземпляр Collections одним из способов:
// новый list
var myList :list<int> = new list<int>{0, 1, 1, 2, 3, 5, 8, 13};// новый map
var myMap :map<String, int> = new map<String, int>{"Hello" = 1, "World" = 2};// новый map (компактный синтаксис)
var myMap :map<String, int> = {
first :1,
second :2,
third :3
};либо конвертировать Array или Vector:
var myArray :Array = new Array(0, 1, 1, 2, 3, 5, 8, 13);
myList = myArray.toList;
var myVector :Vector.<int> = new <int>[0, 1, 1, 2, 3, 5, 8, 13];
myList = myVector.toList;##Поддержка Methods Chaining
Да, Collections действительно поддерживают methods chaining, т.е. последовательное применение нескольких вызовов метода.
var l :list<int> = new list<int>{1, 1, 2, 3, 5, 8, 13};
l.where{it => it > 5 && it % 2 == 0}
.select{it => it.toFixed(2)}
.select{it => "number " + it}
.forEach{it => trace it};В нашем примере мы создали list, который может содержать только int значения.
- Затем мы выбираем только те, которые удовлетворяют условию (“where”).
- Редактируем каждый отобранный элемент (“select”).
- Конвертируем их в строки (“select”).
- Наконец, мы используем цикл по списку и выводим результат.
where, select, selectMany – эти операции легко использовать, когда вы формируете запрос.
Аналогичный код без использования Collections (pure AS3).
var a :Array = new Array(1, 1, 2, 3, 5, 8, 13);
var b :Array = new Array();
var c :Array = new Array();
var d :Array = new Array();
for (var i :int = 0;i < a.length;i++) {
if (a[i] > 5 && i[i] % 2 == 0) {
b.push(a[i]);
}
}
for (var j :int = 0;j < b.length;j++) {
c.push(j.toFixed);
}
for (var k :int = 0;k < c.length;k++) {
d.push("number" + j);
}
for (var m :int = 0;m < d.length;m++) {
trace m;
}##Базовые операции с List
###.add( element ) :T
Добавляет элемент в список.
myList.add(a);Добавляет список элементов к текущему списку, помещая их в конец списка.
myList.addAll(new list<int>{a, b, c});Добавляет элемент в начало списка.
myList.addFirst(q); Удаляет все элементы из списка.
myList.clear;
###.contains( element ) :Boolean
Проверяет наличие элемента в списке.
myList.contains(a);
###.containsAll( list ) :Boolean
Проверяет наличие элементов в списке.
myList.containsAll(new list<int>{a, b, c});Возвращает копию списка.
myList.copy;
###.cut( numberOfElements ) :list<T>
Возвращает элементы из начала списка, исключая n элементов с конца.
Изначальный список не изменяется.
myList.cut(n);Возвращает все уникальные элементы списка.
myList.distinct;Возвращает первый элемент списка.
myList.first;Возвращает элемент с индексом указанным в аргументе.
myList.get(n);Возвращает список элементов, начиная с начала до значения аргумента.
myList.head(n);Возвращает индекс элемента, указанного в аргументе.
myList.indexOf(n);
###.insert( index, element ) :T
Вставляет элемент в указанную позицию списка.
myList.insert(m, n);Проверяет пуст ли список.
myList.isEmpty;Проверяет не пуст ли список.
myList.isNotEmpty;Преобразует элементы списка в строку, вставляет указанный разделитель между элементами, сцепляет их и возвращает получившуюся строку.
myList.join(",");Вставляет последний элемент списка.
myList.last;
###.page( fromElement, toElement ) :list<T>
Возвращает новый список, состоящий из диапазона элементов исходного списка, не модифицируя исходный список.
myList.page(m, n);Удаляет последний элемент списка.
myList.remove(k);
###.removeAll( list ) :list<T>
Удаляет список элементов из текущего списка.
myList.removeAll(new list<int>{a, b, c}); Удаляет элемент в указанной позиции и возвращает его.
myList.removeAt(n); Удаляет первый элемент и возвращает его.
myList.removeFirst;
###.removeHead( length ) :list<T>
Удаляет указанное количество элементов из списка, начиная с начала, и возвращает их.
myList.removeHead(n);Удаляет последний элемент и возвращает его.
myList.removeLast;
###.removeTail( length ) :list<T>
Удаляет указанное количество элементов из списка, начиная с конца, и возвращает их.
myList.removeTail(m);Возвращает новый список с элементами в обратном порядке.
myList.reverse;Помещает элемент в заданную позицию.
myList.set(m, n);Возвращает размер списка.
myList.size;
###.skip( numberOfElements ) :list<T>
Skip the specified number of elements from the beginning of the current list.
myList.skip(m);
###.subList( fromIndex, toIndex ) :list<T>
Возвращает новый список, состоящий из диапазона элементов исходного списка, не модифицируя исходный список.
myList.subList(m, n);
###.tail( numberOfElements ) :list<T>
Возвращает указанное количество элементов, начиная с конца списка.
myList.tail (n);Конвертирует список в массив.
myList.toArray;Конвертирует список в вектор.
myList.toVector;##Бинарные операции с List
Создает новый список, соединив текущий с указанным в аргументе.
myList.concat(new list<int>{a, b, c});
###.disjunction( list ) :list<T>
Создает новый список, который является строгой дизъюнкцией исходного и указанного в аргументе.
myList.disjunction(list);Создает новый список, исключая элементы указанного в аргументе списка.
myList.except(list);
###.intersect( list ) :list<T>
Создает новый список, который является пересечением исходного и указанного в аргументе.
// intersect myList with a, b and c
myList.intersect(new list<int>{a, b, c}); Создает новый список, соединив текущий с указанным в аргументе.
// combine myList and a, b and c
myList.union(new list<int>{a, b, c}); ##Closures операции с List
###.all( condition( element ) ) :Boolean
Проверяет, все ли элементы списка удовлетворяют условию.
myList.all{it => it > a};
###.any( condition( element ) ) :Boolean
Проверяет, есть ли элемент списка, который удовлетворяет условию.
myList.any{it => it == b};
###.fill( yield( element ) ) :void
Заполняет список элементами.
myList.fill{=>
yield a;
yield b;
yield c;
};
###.findFirst( condition( element ) ) :T
Возвращает первый удовлетворяющий условию элемент списка.
myList.findFirst{any => any < c};
###.findLast( condition( element ) ) :T
Возвращает последний элемент списка, удовлетворяющий условию.
// the last element of myList that is less than c
myList.findLast{any => any < c};###.foldLeft( operation( element ), seed )
Выполняет лево-ассоциативную сверку.
var myList :list<int> = new list<int>{1, 2, 3, 4, 5};
myList.foldLeft({it, s => it * s}, 2); // assert 240###.foldRight( operation( element ), seed )
Выполняет право-ассоциативную сверку.
var myList :list<int> = new list<int>{1, 2, 3, 4, 5};
myList.foldRight({it, s => it + s}, 10); // assert 25
###.forEach( operation( element ) ) :void
Применяет операцию ко всем элементам списка.
myList.forEach{element => trace element};###.reduceLeft( operation( elementA, elementB ) )
Выполняет лево-ассоциативную сверку.
var myList :list<int> = new list<int>{1, 2, 3, 4, 5};
myList.reduceLeft{a, b => a + b}; // assert 15###.reduceRight( operation( elementA, elementB ) )
Выполняет право-ассоциативную сверку.
var myList :list<int> = new list<int>{1, 2, 3, 4, 5};
myList.reduceRight{a, b => a * b}; // assert 120
###.removeWhere( condition( element ) ) :list<T>
Удаляет удовлетворяющие условию элементы.
myList.removeWhere{it => it == 0};
###.select( operation( element ) ) :list<T'>
Применяет операцию к каждому элементу и возвращает новый список с результатами.
var myList :list<int> = new list<int>{1, 2, 3};
myList.select{it => "|" + it + "|"}; // assert ["|1|", "|2|", "|3|"]
###.selectMany( operation( element ) ) :list<T>
Преобразует каждый элемент списка и возвращает список, содержащий все элементы.
var myList :list<int> = new list<int>{1, 2, 3};
myList.selectMany{it => new list<int>{1, 0}}; // assert [1, 0, 1, 0, 1, 0]
###.sort( operation( elementA, elementB ) ) :list<T>
Сортирует список.
var myList :list<int> = new list<int>{1, 2, 3};
myList = myList.sort{a, b => b - a}; // reverse sorting, i.e. result is 3, 2, 1
###.where( condition( element ) ) :list<T>
Возвращает список из элементов, удовлетворяющих условию.
myList.where{element => element < b};###( numberOfTimes ).times( operation(counter ) )
Выполняет операцию указанное количество раз.
var dump :String;
(3).times({i => dump += "" + i}); // dump == "123"##Closures операции с элементами List
###.index :int
Возвращает индекс элемента.
var c : int = 0;
[1, 2, 3].toList<int>.forEach{it => assert it.index equals c++};
###.next :T
Возвращает следующий элемент.
var c : int = 1;
var list : list<int> = [1, 2, 3].toList<int>;
list.forEach{it =>
if (c != 2) {
assert it.next equals list[c++];
}
};
###.hasNext :Boolean
Проверяет, есть ли следующий элемент.
var c : int = 0;
var list : list<int> = [1, 2, 3].toList<int>;
list.forEach{it =>
if (c++ != 2) {
assert it.hasNext;
} else {
assert !(it.hasNext);
}
};
###.previous :T
Возвращает предыдущий элемент.
var c : int = -1;
var list : list<int> = [1, 2, 3].toList<int>;
list.forEach{it =>
if (c != -1) {
assert it.previous equals list[c];
}
c++;
};
###.hasPrevious :Boolean
Проверяет, есть ли предыдущий элемент.
var c : int = 0;
var list : list<int> = [1, 2, 3].toList<int>;
list.forEach{it =>
if (c++ != 0) {
assert it.hasPrevious;
} else {
assert !(it.hasPrevious);
}
};##Базовые операции с Map
###.keys :list<keyT>
Возвращает все ключи из map.
myMap.keys;
###.containsKey( key ) :Boolean
Проверяет наличие значения по ключу.
var myMap :map<String, int> = new map<String, int>{"Hello" = 1, "World" = 2};
myMap.containsKey("Good bye"); // false
myMap.containsKey("Hello"); // true
###.containsValue( value ) :Boolean
Проверяет наличие значения в map.
var myMap :map<String, int> = new map<String, int>{"Hello" = 1, "World" = 2};
myMap.containsValue(4); // false
myMap.containsValue(2); // trueУдаляет все элементы map.
myMap.clear;Добавляет все элементы map, указанной в аргументе.
var myMap :map<String, int> = new map<String, int>{"Hello" = 1, "World" = 2};
// "Hello" = 1, "World" = 2, "Lorem" = 3, "Ipsum" = 4}
myMap.putAll(new map<String, int>{"Lorem" = 3, "Ipsum" = 4});Удаляет ключ из map и возвращает значение.
var myMap :map<String, int> = new map<String, int>{"Hello" = 1, "World" = 2};
myMap.removeKey("World"); //myMap={"Hello" = 1}Возвращает все значения из map.
myMap.values;