Hashketball Lab
(Source/Credits: https://dev.to/harlessmark/hashketball-lab-1521)
Problem I'm given a long method (seen below) with two different teams and a number of stat...
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.
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 %}
-
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
```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 ```
Comments section