NAME

Quiq::List - Liste von Objekten

BASE CLASS

Quiq::Hash

SYNOPSIS

use Quiq::List;

# Instantiiere Liste
$lst = Quiq::List->new(\@objects);

# Anzahl der enthaltenen Objekte
$n = $lst->count;

# Array der enthaltenen Objekte
@obj = $lst->elements;

# Füge Objekt zur Liste hinzu (am Ende)
$obj = $lst->push($obj);

# Wähle Objekte aus

@objects = $lst->grep(sub {
    my ($obj,$i,@args) = @_;
    ...
    return $bool;
});

# Bilde Objekte auf Werte ab

@arr = $lst->map(@args,sub {
    my ($obj,$i,@args) = @_;
    ...
    return (...);
};

# Iteriere über alle Objekte

$lst->loop(@args,sub {
    my ($obj,$i,@args) = @_
    ...
});

DESCRIPTION

Ein Objekt der Klasse speichert eine Liste von Objekten. Mit den Methoden der Klasse kann auf dieser Liste operiert werden.

EXAMPLES

Bilde die Summe über einem Attributwert:

use Hash::Util 'sum';
$sum = sum $lst->map(sub {
    my $obj = shift;
    ...
    return $x;
});

Füge Werte zu einer Zeichenkette zusammen:

$str = join "\n",$lst->map(sub {
    my $obj = shift;
    ...
    return $s;
});

Beides zusammen in einem Aufruf:

$lst->loop(\$sum,\$str,sub {
    my ($obj,$i,$sumS,$strS) = @_;
    ...
    $$sumS += $x;
    ...
    if ($i) {
        $$strS .= "\n";
    }
    $$strS .= $s;
});

oder als Closure

my ($sum,$str);
$lst->loop(sub {
    my ($obj,$i) = @_;
    ...
    $sum += $x;
    ...
    if ($i) {
        $str .= "\n";
    }
    $str .= $s;
});

METHODS

Klassenmethoden

new() - Konstruktor

Synopsis

$lst = $class->new;
$lst = $class->new(\@objects);

Arguments

@objects

Array von Objekten.

Returns

Listen-Objekt

Description

Instantiiere ein Objekt der Klasse und liefere eine Referenz auf dieses Objekt zurück. Der Aufruf ohne Argument ist äquivalent zu einem Aufruf mit einem leeren Array. Das Array und die Objekte werden nicht kopiert, es wird lediglich die übergebene Referenz gespeichert, d.h. alle Operationen finden auf den Originalstrukturen statt.

Objektmethoden

count() - Anzahl der Objekte

Synopsis

$n = $lst->count;

Returns

Nicht-negative ganze Zahl

Description

Liefere die Anzahl der in der Liste gespeichteren Objekte.

elements() - Liste der Objekte

Synopsis

@objects | $objectA = $lst->elements;

Returns

Liste von Objekten. Im Skalarkontext eine Referenz auf die Liste.

Description

Liefere das Array der in der Liste gespeicherten Objekte.

grep() - Wähle Objekte aus

Synopsis

@objects | $lstNew = $lst->grep(@args,$sub);

Arguments

$sub

Subroutine, die für jedes Objekt prüft, ob es in der Ergebnismenge enthalten ist. Die Subroutine hat die Signatur

sub {
    my ($obj,$i,@args) = @_;
    ...
    return $bool;
}

Returns

Liste von Objekten. Im Skalarkontext eine Referenz auf eine (neu erzeugte) Liste mit diesen Objekten.

Description

Rufe die Subroutine $sub für jedes Element der Liste auf. Liefert die Subroutine wahr, wird das betreffende Objekt in die Ergebnismenge übernommen, sonst nicht.

loop() - Iteriere über allen Elementen

Synopsis

$lst->loop(@args,$sub);

Arguments

@args

Liste von Argumentn, z.B. Referenzen auf Strukturen, die von der Schleife manipuliert werden. Die Liste kann leer sein.

$sub

Subroutine, die für jedes Objekt aufgerufen wird. Die Subroutine hat die Signatur

sub {
    my ($obj,$i,@refs) = @_;
    ...
}

Description

Rufe die Subroutine $sub für jedes Element der Liste auf. Innerhalb der Subroutine können die Strukturen, auf die @args verweist, manipuliert werden.

map() - Bilde Objekte auf Werte ab

Synopsis

@arr | $arr = $lst->map(@args,$sub);

Arguments

$sub

Subroutine, die für jedes Objekt eine Liste von Werten liefert. Die Subroutine hat die Signatur

sub {
    my ($obj,$i,@args) = @_;
    ...
    return @arr;
}

Returns

Array aller Werte. Im Skalarkontext eine Referenz auf das Array.

Description

Rufe die Subroutine $sub für jedes Element der Liste auf, sammele alle gelieferten Werte ein und liefere das resultierende Array zurück.

push() - Füge Objekt am Ende der Liste hinzu

Synopsis

$obj = $lst->push($obj);

Arguments

$obj

Objekt

Returns

Objekt

Description

Füge Objekt $obj am Ende der Liste hinzu und liefere eine Referenz auf dieses Objekt zurück.

VERSION

1.221

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2024 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.