IMHO, all of these “solutions” are, in this particular case, much more expensive than ... a brute-force search through an array of 2-tuples consisting of [key_value, frequency].   Even if you are dealing with, say, a few hundred “buckets” in such an array, you are still coming out far ahead of all of these other calisthenics, which, as you see, are shamelessly building arrays of their own.   Sometimes, a simple loop that iterates through an entire, moderately sized, data structure, knowing that it will only have to make one complete pass through that structure (although it will be required to do all of this, every time ...), really does turn out to be the fastest way.

A “hash” is a very special-purpose structure:   it’s good for searching for discrete, unordered keys, particularly those that have a string representation.   If that’s not true for your situation, you shouldn’t be coercing a hash into doing what it isn’t designed to do.   The decision instead should be made whether a more-complicated but purposeful data structure is actually worth the effort.   If so, grab one from CPAN.   Otherwise ... and this is strictly JM2CW ... I say, just foreach it.


In reply to Re: Finding hash key related to closest value by Anonymous Monk
in thread Finding hash key related to closest value by nanophd

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.