Yeah, I could see Key ordering or Entry ordering both make sense depending on the context :)

Adam J. Shook wrote:
I personally think all maps with the same keys should be sorted
together, but I think it'd be best to support and document both ways and
leave that up to the user.  I'm sure either way could be argued, and
this is certainly an edge case for lexicoders.

On Tue, Dec 29, 2015 at 7:16 PM, Keith Turner <[email protected]
<mailto:[email protected]>> wrote:

    Do you want all maps with the same keys to sort together?  If so
    doing abc123 would make that happen.

    The map data below

       { a : 1 , b : 2, c : 3 }
       { a : 1 , x : 8, y : 9 }
       { a : 4 , b : 5, c : 6 }

    Would sort like the following if encoding key values pairs

       a1b2c3
       a1x8y9
       a4b5c6

    If encoding all key and then all values, it would sort as follows

       abc123
       abc456
       axy189



    On Tue, Dec 29, 2015 at 4:53 PM, Adam J. Shook <[email protected]
    <mailto:[email protected]>> wrote:

        Agreed, I came to the same conclusion while implementing.  The
        final result that I have is a SortedMapLexicoder to avoid any
        comparisons going haywire.  Additionally, would it be best to
        encode the map as an array of keys followed by an array of
        values, or encode all key value pairs back-to-back:

        { a : 1 , b : 2, c : 3 } encoded as

        a1b2c3
        -or-
        abc123

        Feels like I should be encoding a list of keys, then the list of
        values, and then concatenating these two encoded byte arrays.  I
        think the end solution will be to support both?  I'm having a
        hard time reconciling which method is better, if any.  Hard to
        find some good examples of people who are sorting a list of maps.

        On Tue, Dec 29, 2015 at 2:47 PM, Keith Turner <[email protected]
        <mailto:[email protected]>> wrote:



            On Mon, Dec 28, 2015 at 11:47 AM, Adam J. Shook
            <[email protected] <mailto:[email protected]>> wrote:

                Hello all,

                Any suggestions for using a Map Lexicoder (or
                implementing one)?  I am currently using a new
                ListLexicoder(new PairLexicoder(some lexicoder, some
                lexicoder), which is working for single maps.  However,
                when one of the lexicoders in the Pair is itself a Map
                (and therefore another ListLexicoder(PairLexicoder)), an
                exception is being thrown because ArrayList is not
                Comparable.



            Since maps do not have a well defined order of keys and
            values, comparison is tricky.   The purpose of Lexicoders is
            encode things in such a way that the lexicographical
            comparison of the serialized data is possible.  With a
            hashmap if I add the same data in the same order to two
            different hash map instances, its possible that when
            iterating over those maps I could see the data in different
            orders.   This could lead to two maps constructed in the
            same way at different times (like different JVMs with
            different implementations of HashMap) generating different
            data that compare as different.  Ideally comparison of the
            two would yield equality.

            Something like LinkedHashMap does not have this problem for
            the same insertion order.  If you want things to be
            comparable regardless of insertion order (which I think is
            more intuitive), then SortedMap seems like it would be a
            good candidate.  So maybe a SortedMapLexicoder would be a
            better thing to offer?


                Regards,
                --Adam





Reply via email to