Hi all
I'm looking for a fast way of converting a sequence of four characters (a,b,c,d) to a number.
So far I use
my $lt = [];
$lt->[ord(a)] = 00;
$lt->[ord(b)] = 01;
$lt->[ord(c)] = 10;
$lt->[ord(d)] = 11;
foreach my $string{
_convert($string);
...
sub _convert{
my $string = shift;
my $bs="";
foreach(split(//,$string)){
$bs.=$lt->[$_];
}
return int($bs);
}
I also tried using a hash of form {a=>00,b=>01,c=>10,d=>11} or use four substitutes on $string which should have been kind of four times the runtime (processing the complete string 4 times). But somehow the regexp substitution seems to be the fastest. However, it's still pretty slow if I'm iterating over millions of strings. Any faster solution?
Cheers,
Lowry
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|