Git Product home page Git Product logo

Comments (14)

lstrojny avatar lstrojny commented on September 24, 2024

Looks useful! @ajb-in do you have a good idea for a name?

from functional-php.

ajb-in avatar ajb-in commented on September 24, 2024

No good ideas, other than I'd refer to "keys" rather than "hashes" (and would probably reflect that in the name of the argument).
Also, note that this is equivalent to array_combine(map($collection, $callback), $collection)

from functional-php.

MazeChaZer avatar MazeChaZer commented on September 24, 2024

Thanks for the feedback! @ajb-in The function is not exactly equivalent to your example because apart from the keys the values can also be mapped in the callback.

>>> hashMap(
...     ['abc', 'foobar'],
...     function ($value) {
...         return [$value[0], strtoupper($value)];
...     }
... )
=> [
     "a" => "ABC",
     "f" => "FOOBAR",
   ]

Your example describes another use case: Mapping only the keys. This would have been sufficient for my needs, even better; Perhaps this is also a useful function? A better name for hashMap could be keyValueMap and your example could be called keyMap.

In comparison:

>>> map(
...     ['abc', 'foobar'],
...     function ($value) {
...         return strtoupper($value);
...     }
... )
=> [
     "ABC",
     "FOOBAR",
   ]
>>> keyMap(
...     ['abc', 'foobar'],
...     function ($value) {
...         return $value[0];
...     }
... )
=> [
     "a" => "abc",
     "f" => "foobar",
   ]
>>> keyValueMap(
...     ['abc', 'foobar'],
...     function ($value) {
...         return [$value[0], strtoupper($value)];
...     }
... )
=> [
     "a" => "ABC",
     "f" => "FOOBAR",
   ]

What do you think?

from functional-php.

lstrojny avatar lstrojny commented on September 24, 2024

@MazeChaZer @ajb-in instead of doing key and value mapping in one sweep, we could have a mapKeys() that does to keys what map does to values.

from functional-php.

MazeChaZer avatar MazeChaZer commented on September 24, 2024

@lstrojny Sounds good to me. I like that even better than the keyValueMap approach.

Edit: Just to be clear, I'm talking about mapKeys()

from functional-php.

MazeChaZer avatar MazeChaZer commented on September 24, 2024

Are we at a consens here? Should I start implementing/testing/documenting the mapKeys() function?

from functional-php.

ajb-in avatar ajb-in commented on September 24, 2024

I for one would use mapKeys for a different idea (something akin to Haskell's mapKeys).
But then again, I don't have a better name for this one, and can't find a precedent on the literature apart from the Schwartzian transform.

from functional-php.

MazeChaZer avatar MazeChaZer commented on September 24, 2024

What about reindex()?

from functional-php.

lstrojny avatar lstrojny commented on September 24, 2024

Sounds good to me

from functional-php.

MazeChaZer avatar MazeChaZer commented on September 24, 2024

Ok, I'm starting to work on this, if we find an even better name we can still change it later on.

from functional-php.

MazeChaZer avatar MazeChaZer commented on September 24, 2024

Mh, what is supposed to happen if the callback produces duplicate keys? Should an exception be thrown or should later values just overwrite previous values that had the same key? I tend to throw an exception.

from functional-php.

MazeChaZer avatar MazeChaZer commented on September 24, 2024

I looked a little further into this. The PHP builtins array_flip() and array_combine() overwrite previous values which had the same key. Furthermore I saw that in this library exceptions are only thrown for invalid arguments. So I guess the first alternative, just overwriting previous values, makes more sense after all.

from functional-php.

ajb-in avatar ajb-in commented on September 24, 2024

+1 on reindex.
Also agree with your dup key resolution.

from functional-php.

MazeChaZer avatar MazeChaZer commented on September 24, 2024

Thanks for the discussion

from functional-php.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.