NAME
Collections::Ordered - Easy to use iterator
VERSION
Version 0.01
SYNOPSIS
use Collections::Ordered;
use Collections::Sorted;
# Ordered collection
my $colection = Collections::Ordered->new;
$colection->add($item);
$colection->do(sub { print $_[0] });
$colection->remove($item);
# Access first element
print $sorted_collection->first;
HIERARCHY
Collections::Ordered
+Collections::Sorted
+Collections::Set
CLASS METHODS
new()
Returns a new instace of a Collection
my $collection = Collections::Ordered->new;
from_array(\@array)
Returns a new instace of a Collection filled with \@array
my $collection = Collections::Ordered->new(34,23,12,443);
INSTANCE METHODS
add($element)
Add $element as part of receiver's elements
$colection->add(1);
add_all($elements)
Add all $collection's element as part of receiver's elements
$colection->add_all($another_collection);
... or ...
$collection->add_all(1,2,3);
... or ...
$colection->add_all([1,2,3]);
at($index)
Returns element at the $index location, if location doesn't exists it throws Collection::Error::InvalidSize error, first element index is 1
my $third_element = $collection->at(3);
collect($sub)
Returns a new object like the receiver whose elements are the result of evaluating $sub over each element of the receiver
my $names = $employees->collect(sub { $_[0]->name});
# First name in the name list
$names->first
detect($sub)
Returns the first element that evaluated agains $sub is true, if no element is detect throws an error
my $employee = $employees->detect(sub { $_[0]->name eq 'John' });
detect_and_if_none($sub,$another_sub)
Returns the first element of the receiver that evaluated agains $sub is true, if no element is true evaluates $another_sub and returns the results
my $employee = $employees->detect (
sub { $_[0]->name eq 'John' },
sub { $employees->add(Employee->new('John') }
);
do($sub)
Iterate over each of the receiver elements evaluating $sub for each element
# print all elements
$collection->do(sub { print $_[0] });
exists($element)
Returns a true value if an element $element exists
if($collection->exists($element) {
print 'Hey $element exists!';
}
first()
Returns the first element of the receiver's elements if it can't be retrieve throws an Error::InvalidSize exception
my $first_element = $collection->first;
index_of($element)
Returns the index of an $element, if the element is not part of the receiver's elements throws an Error::ElementNotFound exception, first element's index is 1
$collection->add('hello');
$collection->add('bye');
...
$collection->index_of('bye');
# This will return 2 (as it is the second element)
index_of_and_if_none($element,$sub)
Returns the index of $element element, if the element is not part of the receiver's elements evaluates $sub
$collection->index_of_and_if_none('hello', sub { print 'Not found!' });
inject_into($value,$sub)
Inject $value and iterate over each of receiver's elements using $sub, finally answer the result, this method is usefull for accumulator tasks
# elements are 1, 5, 8, 9
my $sum = $collection->inject_into(3, sub { $_[0] + $_[1] });
# $sum is 26
is_empty()
Returns true value if the receiver's has no elements
if($collection->is_empty) {
$collection->add($some_element);
}
join($separator,$sub)
Iterate over each of receiver's element, evaluating $sub over each element, finally concatenate results using $separator
my $all_names = $employees->join(',', sub { $_[0]->name });
last()
Returns the last element of the receiver's elements if it can't be retrieve throws an Collections::Error::InvalidSize exception
my $last_element = $collection->last;
remove($element)
Removes $element from receiver's elements if the element doesn't exists throws Collections::Error::ElementNotFound exception
$employees->remove($employees->first);
remove_all($elements)
Removes all $elements from receiver's elements if any of the elements to be removed doesn't exists throws Collections::Error::ElementNotFound exception
my $elements = [1 2 3];
$collection->remove_all($elements);
...
$collection->remove_all($another_collection);
reverse()
Returns a collection like this one but with elements in reverse order
second()
Returns the second element of the receiver's elements if it doesn't exists throws an Error::InvalidSize exception
my $second_element = $collection->second;
size()
Returns the number of collection's elements
print $collection->size;
to_array()
Returns an array or array_ref (depending on the context) with all the elements
print $collection->size;
to_ordered()
Returns the same object
my $col = $collection->to_ordered;
to_set()
Returns a new Collections::Set with the elements of this collection
my $set = $collection->to_set;
to_sorted($block)
Returns a new Collections::Sorted with the elements of this collection, first argument is the sort block if none specified it will use the default sorting block
my $sorted = $collection->to_sorted;
AUTHOR
Mariano Wahlmann, <dichoso at gmail.com>
BUGS
Please report any bugs or feature requests to dichoso at gmail.com
. I will be notified, and then you'll be notified of progress on your bug as I make changes.
COPYRIGHT & LICENSE
Copyright 2009 Mariano Wahlmann, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.