Problem

I'm given a long method (seen below) with two different teams and a number of stats for each player. I needed to come up with different methods to answer a few questions.

  1. Build a method, num_points_scored that takes in an argument of a player's name and returns the number of points scored for that player.

  2. Build a method, shoe_size, that takes in an argument of a player's name and returns the shoe size for that player.

  3. Build a method, team_colors, that takes in an argument of the team name and returns an array of that teams colors.

  4. Build a method, team_names, that operates on the game hash to return an array of the team names.

  5. Build a method, player_numbers, that takes in an argument of a team name and returns an array of the jersey number's for that team.

  6. Build a method, player_stats, that takes in an argument of a player's name and returns a hash of that player's stats.

ruby def game_hash { away: { team_name: 'Charlotte Hornets', colors: %w[Turquoise Purple], players: [ { player_name: 'Jeff Adrien', number: 4, shoe: 18, points: 10, rebounds: 1, assists: 1, steals: 2, blocks: 7, slam_dunks: 2 }, { player_name: 'Bismack Biyombo', number: 0, shoe: 16, points: 12, rebounds: 4, assists: 7, steals: 22, blocks: 15, slam_dunks: 10 }, { player_name: 'DeSagna Diop', number: 2, shoe: 14, points: 24, rebounds: 12, assists: 12, steals: 4, blocks: 5, slam_dunks: 5 }, { player_name: 'Ben Gordon', number: 8, shoe: 15, points: 33, rebounds: 3, assists: 2, steals: 1, blocks: 1, slam_dunks: 0 }, { player_name: 'Kemba Walker', number: 33, shoe: 15, points: 6, rebounds: 12, assists: 12, steals: 7, blocks: 5, slam_dunks: 12 } ] }, home: { team_name: 'Brooklyn Nets', colors: %w[Black White], players: [ { player_name: 'Alan Anderson', number: 0, shoe: 16, points: 22, rebounds: 12, assists: 12, steals: 3, blocks: 1, slam_dunks: 1 }, { player_name: 'Reggie Evans', number: 30, shoe: 14, points: 12, rebounds: 12, assists: 12, steals: 12, blocks: 12, slam_dunks: 7 }, { player_name: 'Brook Lopez', number: 11, shoe: 17, points: 17, rebounds: 19, assists: 10, steals: 3, blocks: 1, slam_dunks: 15 }, { player_name: 'Mason Plumlee', number: 1, shoe: 19, points: 26, rebounds: 11, assists: 6, steals: 3, blocks: 8, slam_dunks: 5 }, { player_name: 'Jason Terry', number: 31, shoe: 15, points: 19, rebounds: 2, assists: 2, steals: 4, blocks: 11, slam_dunks: 1 } ] } } end

What I Learned

This lab was a lot easier for me to understand, was more fun and I learned a lot more than the Green Grocer Lab I did last week.

{% link https://dev.to/1000martians/green-grocer-lab-challenge-part-i-1ml9 %}

  1. How to accept an argument and return a string from inside a nested hash or array.

  2. How to use the .map enumerable to create a new array from a nested hash or array.

  3. And pretty much anything that accepts an argument and returns any line inside hashes.

Final Iteration

```ruby require 'pry'

def num_points_scored(player_search) game_hash.each do |team, team_info| team_info[:players].each do |player| if player[:player_name] == player_search return player[:points] end end end end

def shoe_size(name) game_hash.each do |team, team_info| team_info[:players].each do |player| if player[:player_name] == name return player[:shoe] end end end end

def team_colors(team_input) if team_input.downcase == "charlotte hornets" return game_hash[:away][:colors] else return game_hash[:home][:colors] end end

def team_names game_hash.map do |team, team_info| team_info[:team_name] end end

def player_numbers(input) output = [] game_hash.each do |team, team_info| if team_info[:team_name] == input team_info.each do |key, value| if key == :players value.each do |player| output.push(player[:number]) end end end end end return output end

def player_stats(input) game_hash.each do |team, team_info| team_info.each do |key, value| if key == :players value.each do |player| if input == player[:player_name] player.delete(:player_name) # having player name inside the hash was a bad idea! return player end end end end end end

def big_shoe_rebounds big_shoe = 0 rebounds = 0 game_hash.each do |team, team_info| team_info[:players].each do |player| if player[:shoe] > big_shoe big_shoe = player[:shoe] rebounds = player[:rebounds] end end end return rebounds end ```