Assume we represent a set by an array in Perl (so strictly speaking it is not merely a set but an ordered set). Now given an item, how to check if it is in the set or not?
In Perl, there is a very powerful command, grep
, that can do this job. Assume a set is represented by @prime
, to check if item $num
is in the set, we can use this
grep {$_ == $num} @prime;
If it returns a non-empty array, then it is; otherwise, no.
Further, if we not only want to know whether it is in the set, but also where of the set, we can make it a bit more complicated, like this
grep {$prime[$_] == $num} (0..@#prime);
The following demonstrate this idea:
#!/usr/bin/perl
# Test for set's is-in operation using grep
# Output:
# 11 is a prime, at index 4
#
my @prime = (2, 3, 5, 7, 11, 13, 17, 19, 23, 31);
my $num = 6;
my @a = grep {$prime[$_] == $num} (0..$#prime);
foreach (@a) {
print "$num is a prime, at index $_\n";
};
$num = 11;
@a = grep {$prime[$_] == $num} (0..$#prime);
foreach (@a) {
print "$num is a prime, at index $_\n";
};