Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/robrwo/set-light
- Owner: robrwo
- Created: 2019-10-22T20:57:21.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2021-05-07T12:03:29.000Z (over 3 years ago)
- Last Synced: 2024-10-11T21:56:26.454Z (about 1 month ago)
- Language: Perl
- Size: 77.1 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: Changes
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.