in reply to Re: Array elements in a hash
in thread Array elements in a hash

Thanks dragonchild,
I always forget about using grep (working on win_32)

One more question, do you know if it's possible to determine the indice of the element in the array using grep?

Thanks!

Replies are listed 'Best First'.
Re: Re: Re: Array elements in a hash
by dragonchild (Archbishop) on Mar 24, 2003 at 21:37 UTC
    It all depends on what you grep for. Think about it this way - you're taking a list and creating another list from it, applying some criterion to determine if you should include that element or not. It can be a list of anything you want, not just necessarily the elements of the array.

    The following snippets below are identical:

    my @positive_indices = grep { $arr[$_] > 0 } 0 .. $#arr; my @negative_indices = grep { $arr[$_] < 0 } 0 .. $#arr; #### my @positive_indices = map { $arr[$_] > 0 ? $_ : () } 0 .. $#arr; my @negative_indices = map { $arr[$_] < 0 ? $_ : () } 0 .. $#arr; #### my @positive_indices; my @negative_indices; for (0 .. $#arr) { push @positive_indices, $_ if $arr[$_] > 0; push @negative_indices, $_ if $arr[$_] > 0; }

    ------
    We are the carpenters and bricklayers of the Information Age.

    Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.

    Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.

      ok, that makes sense,
      now if I'm using my data example above, and I have in fact determined that a duplicate entry is seen, what does the snippet of code look like to increase the counter in my array?
      $VAR1 = { 'response_1.3.6.1.2.1.2.2.1.12.27' => { 'Time_Arrived' => '16:14:13.8', 'Error_Status' => 'No error', 'OID_NAME' => [ [], [ '1.3.6.1.2.1.2.2.1.11.27', 'ifInUcastPkts.27', 1 ], [ '1.3.6.1.2.1.2.2.1.15.27', #seen again 'ifInUnknownProtos.27', 1 # I need to increment this to 2 ],
      Thanks for all your help!
        Ok. Now, we're getting into the issue of "What questions do I need to be able to ask my data?". That, in many ways, is the fundamental issue of all programming theory. How you structure your data determines algorithms, efficiency, programming style, programming language, etc.

        The data structure you have looks like something that would be created by reading in part of a log-file, presumably something to do with network traffic of some sort. What you did was read in the file, and, when you hit this section of similar stuff, you made an array.

        To answer the question you want to ask, I would create a hash instead of an array. It might look something like:

        ... 'OID_NAME' => { '1.3.6.1.2.1.2.2.1.11.27' => { stuff => 'ifInUcastPkts.27', NumTimesSeen => 1, }, '1.3.6.1.2.1.2.2.1.15.27' => { stuff => 'ifInUcastPkts.27', NumTimesSeen => 2, }, }, ...
        Now, if the address-looking thingy isn't the important stuff, pick your key accordingly.

        Now, if you need to preserve the original ordering and the fact that duplicates occurred at positions 2 and 5, you'll need an array. Personally, I tend to work with hashes more than arrays, because the questions I tend to ask don't involve preserving this kind of information. Your needs might be different.

        ------
        We are the carpenters and bricklayers of the Information Age.

        Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.

        Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.