Skip to content

Instantly share code, notes, and snippets.

@elct9620
Last active March 10, 2020 12:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elct9620/3b2bbd56e817ace65735ed6dcf163912 to your computer and use it in GitHub Desktop.
Save elct9620/3b2bbd56e817ace65735ed6dcf163912 to your computer and use it in GitHub Desktop.
Functional Class Homework
school = [
%{
name: "1A",
teacher: %{
age: 28,
first_name: "Tricia",
last_name: "Garrett"
},
assistants: %{
age: 38,
first_name: "Liliana",
last_name: "Kidd"
},
students: [
%{
age: 46,
first_name: "Luz",
last_name: "Casey"
},
%{
age: 38,
first_name: "Rosemary",
last_name: "Barber"
}
]
},
%{
name: "1B",
teacher: %{
age: 43,
first_name: "Ollie",
last_name: "Matthews"
},
assistants: nil,
students: [
%{
age: 45,
first_name: "Ollie",
last_name: "Sandoval"
},
%{
age: 27,
first_name: "Gale",
last_name: "Coleman"
}
]
},
%{
name: "2A",
teacher: %{
age: 49,
first_name: "Liza",
last_name: "Vega"
},
assistants: %{
age: 48,
first_name: "Tricia",
last_name: "Brewer"
},
students: [
%{
age: 24,
first_name: "Ophelia",
last_name: "Roy"
},
%{
age: 40,
first_name: "Ophelia",
last_name: "Sears"
},
%{
age: 37,
first_name: "Gale",
last_name: "Strong"
}
]
},
%{
name: "2B",
teacher: %{
age: 24,
first_name: "Rochelle",
last_name: "Wilcox"
},
assistants: [
%{
age: 32,
first_name: "Gale",
last_name: "Christensen"
},
%{
age: 46,
first_name: "Luz",
last_name: "Crawford"
},
%{
age: 38,
first_name: "Rosemary",
last_name: "Casey"
}
],
students: [
%{
age: 42,
first_name: "Gale",
last_name: "Joseph"
},
%{
age: 38,
first_name: "Ophelia",
last_name: "Crawford"
},
%{
age: 45,
first_name: "Gale",
last_name: "Bowers"
}
]
}
]
school
|> Enum.flat_map(fn x -> x end)
|> Enum.filter(fn {type, _} -> Enum.member?([:students, :teacher, :assistants], type) end)
|> Enum.map(fn {type, items} -> %{(if type == :students, do: :students, else: :staffs) => List.wrap(items)} end)
|> Enum.reduce(fn x, acc -> Map.merge(x, acc, fn _, x, y -> Enum.concat(x, y) end) end)
|> Enum.map(fn {key, value } -> { key, Enum.filter(value, fn %{ age: age } -> age >= 30 end)} end)
|> Enum.map(fn {key, value } -> { key, Enum.group_by(value, fn %{first_name: first_name} -> first_name end, fn %{first_name: first_name, last_name: last_name} -> "#{first_name} #{last_name}" end)} end)
|> Map.new
|> IO.inspect
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment