DEV Community

Mark Harless
Mark Harless

Posted on • Edited on

4 1

Green Grocer Lab

Problem

I have a shopping cart full of items that I need to consolidate with a consolidate_cart method. This cart is made up of one array and needs to be put into a hash. Each index item has a name, price, if it's on clearance and how many of each item there are (count).

For example, this:

[
  {"AVOCADO" => {:price => 3.00, :clearance => true }},
  {"AVOCADO" => {:price => 3.00, :clearance => true }},
  {"KALE"    => {:price => 3.00, :clearance => false}}
]
Enter fullscreen mode Exit fullscreen mode

Needs to turn into this:

{
  "AVOCADO" => {:price => 3.00, :clearance => true, :count => 2},
  "KALE"    => {:price => 3.00, :clearance => false, :count => 1}
}
Enter fullscreen mode Exit fullscreen mode

What I Learned

This was a particularly difficult challenge for me and I needed help because I didn't even know where to start. I wasn't terribly far off, though. I got a more firm understanding of .each and what the |pipes| mean as well as, obviously, moving nested hashes in an array to a single hash.

While asking for help I was told to install Pry which is a Ruby program that lets you stop your code at a specific line to better debug it. I didn't get to play with it on my own but it does seem like a very useful tool for a Ruby programmer.

Final Iteration

def consolidate_cart(cart)
  output = {}
  cart.each do |item|
    item_name = item.keys[0]
    if output[item_name]
      output[item_name][:count] += 1 
    else
      output[item_name] = item[item_name]
      output[item_name][:count] = 1 
    end
  end
  output
end
Enter fullscreen mode Exit fullscreen mode

Original Problem

The cart starts as an array of individual items. Translate it into a Hash that includes the counts for each item with the consolidate_cart method.

For instance, if the method is given the array below:

[
  {"AVOCADO" => {:price => 3.00, :clearance => true }},
  {"AVOCADO" => {:price => 3.00, :clearance => true }},
  {"KALE"    => {:price => 3.00, :clearance => false}}
]
Enter fullscreen mode Exit fullscreen mode

then the method should return the hash below:

{
  "AVOCADO" => {:price => 3.00, :clearance => true, :count => 2},
  "KALE"    => {:price => 3.00, :clearance => false, :count => 1}
}
Enter fullscreen mode Exit fullscreen mode

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay