## DEV Community is a community of 552,031 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# Hashketball Lab

## 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.

``````def game_hash
{
away: { team_name: 'Charlotte Hornets',
colors: %w[Turquoise Purple],
players: [
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.

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

``````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
``````