Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/robrwo/set-light

(memory efficient) unordered set of strings
https://github.com/robrwo/set-light

Last synced: 11 days ago
JSON representation

(memory efficient) unordered set of strings

Awesome Lists containing this project

README

        

# NAME

Set::Light - (memory efficient) unordered set of strings

# VERSION

version 0.95

# SYNOPSIS

```perl
use Set::Light;

my $set = Set::Light->new( qw/foo bar baz/ );

if (!$set->is_empty())
{
print "Set has ", $set->size(), " elements.\n";
for (qw/umpf foo bar baz bam/)
{
print "Set does ";
print " not " unless $set->has($_);
print "contain '$_'.\n";
}
}
```

# DESCRIPTION

Set::Light implements an unordered set of strings. Set::Light
currently uses a hash underneath, and each key of the hash points to
the same scalar, thus saving memory per item.

## Why not use a hash?

Usually you would use a hash to keep track of a list of items like:

```perl
my %SEEN;

...

if (!$SEEN->{$item}++)
{
# haven't seen item before
}
```

While this is very fast (both on inserting items, as well as looking them up),
it uses quite a lot of memory, since each key in `%SEEN` needs one scalar.

## Why not use Set::Object or Set::Scalar?

These use even more memory and/or are slower than an ordinary hash.

# METHODS

## new

```perl
my $set = Set::Light->new( \%opts, @members );
```

Creates a new Set::Light object. An optionally passed hash reference can
contain options.

Any members passed to the constructor will be inserted.

Currently no options are supported.

## insert

```
$set->insert( $string );
$set->insert( @strings );
```

Inserts one or more strings into the set. Returns the number of insertions
it really did. Elements that are already contained in the set do not
get inserted twice. So:

```perl
use Set::Light;

my $set = Set::Light->new();
print $set->insert('foo'); # 1
print $set->insert('foo'); # 0
print $set->insert('bar','baz','foo'); # 2 (foo already inserted)
```

## is\_empty

```
if (!$set->is_empty()) { ... }
```

Returns true if the set is empty (has zero elements).

## is\_null

This is an alias to ["is\_empty"](#is_empty).

## size

```perl
my $elems = $set->size();
```

Returns the number of elements in the set.

## has

```
if ($set->has($member)) { ... }
```

Returns true if the set contains the string `$member`.

## contains

This is an alias for ["has"](#has).

## exists

This is an alias for ["has"](#has).

## delete

```
$set->delete( $string );
$set->delete( @strings );
```

Deletes one or more strings from the set. Returns the number of
deletions it really did. Elements that are not contained in the set
cannot be deleted. So:

```perl
use Set::Light;

my $set = Set::Light->new();
print $set->insert('foo','bar'); # 2
print $set->delete('foo','foo'); # 1 (only once deleted)
pprint $set->delete('bar','foo'); # 1 (only once deleted)
```

## remove

This is an alias for ["delete"](#delete).

## members

```perl
my @members = $set->members;
```

This returns an array of set members in an unsorted array.

This was added in v0.91.

# SEE ALSO

[Set::Object](https://metacpan.org/pod/Set::Object), [Set::Scalar](https://metacpan.org/pod/Set::Scalar).

# SOURCE

The development version is on github at [https://github.com/robrwo/Set-Light](https://github.com/robrwo/Set-Light)
and may be cloned from [git://github.com/robrwo/Set-Light.git](git://github.com/robrwo/Set-Light.git)

# BUGS

Please report any bugs or feature requests on the bugtracker website
[https://github.com/robrwo/Set-Light/issues](https://github.com/robrwo/Set-Light/issues)

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

# AUTHOR

Tels

# CONTRIBUTOR

Robert Rothenberg

# COPYRIGHT AND LICENSE

This software is copyright (c) 2004-2008, 2019-2021 by Tels.

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