Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^2: What makes an array sorted and a hash unsorted?

by ikegami (Patriarch)
on Jun 04, 2009 at 15:03 UTC ( [id://768459]=note: print w/replies, xml ) Need Help??


in reply to Re: What makes an array sorted and a hash unsorted?
in thread What makes an array sorted and a hash unsorted?

but then why does length(@a) report 5 when there is a value in $a[37865]? )

Because the string "37866" has five characters in it. You want 0+@a, scalar(@a) or similar to get the number of entries in the array.

Did you think you were proving Perl arrays are sparse? That's not the case. Quite the opposite, Perl usually allocates more memory than needed to allow future growth.

$ perl -MDevel::Peek -e'$a[37865]=1; Dump \@a,1; push @a,2; Dump \@a,1 +' SV = RV(0x8176690) at 0x814ed9c SV = PVAV(0x8153c64) at 0x814f6a8 FILL = 37865 <-- Index of last used ele MAX = 37865 <-- Index of last allocated ele SV = RV(0x8176690) at 0x814f684 SV = PVAV(0x8153c64) at 0x814f6a8 FILL = 37866 <-- Index of last used ele MAX = 65531 <-- Index of last allocated ele

(Output trimmed to the relevant.)

So we can't compare arrays and hashes without looking at the costs to do operations or their built-in access methods.

Indeed. They each have their strengths.

Replies are listed 'Best First'.
Re^3: What makes an array sorted and a hash unsorted?
by jethro (Monsignor) on Jun 04, 2009 at 16:31 UTC

    My only excuse for the mistake is I'm just editing some old c sources and working with char arrays is damaging to the mind, I even made the same mistake there and used length() instead of strlen(). Naturally I meant scalar(@a)

    Did you think you were proving Perl arrays are sparse?

    No, I was trying to prove that a perl array is not what a computer science book would call an array. In such a book an idealized data type 'array' wouldn't have holes. And after thinking about it, it wouldn't have a push or pop operator, that would be the data type 'stack'

      No, I was trying to prove that a perl array is not what a computer science book would call an array.

      I don't see why you think they aren't. Perl arrays are a continuous series of equally sized records, allowing for instant addressing of any element. That definitely fits the traditional formal definition.

      In such a book an idealized data type 'array' wouldn't have holes.

      Perl arrays aren't sparse. There are no holes. Every element exists. (Those three statements are synonymous.)

      And after thinking about it, it wouldn't have a push or pop operator, that would be the data type 'stack'

      Stacks (and queues, and ...) can be implemented using an array. They're not mutually exclusive.

      The presence of utility functions to manipulate a data structure doesn't change the data structure.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://768459]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (5)
As of 2024-04-23 15:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found