Hashketball Lab
Mark Harless
Posted on August 26, 2019
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.
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.Build a method,
shoe_size
, that takes in an argument of a player's name and returns the shoe size for that player.Build a method,
team_colors
, that takes in an argument of the team name and returns an array of that teams colors.Build a method,
team_names
, that operates on the game hash to return an array of the team names.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.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: [
{ 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.
Article No Longer Available
How to accept an argument and return a string from inside a nested hash or array.
How to use the
.map
enumerable to create a new array from a nested hash or array.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
Posted on August 26, 2019
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 29, 2024