Reputation: 5325
I have the following array:
arr = [
"Assignment:Chapter 1 Code Exercises (Real)",
[100, 100, 100, 100, 100, 100, 100, 100],
"Assignment:Chapter 2 Code Exercises (Real)",
[93, 75, 100, 100, 100, 55, 75, 100],
"Assignment:Chapter 3 Code Exercises (Real)",
[100, 80, 100, 100, 90, 85, 65, 100],
"Assignment:Chapter 4 Code Exercises (Real)",
[100, 90, 100, 100, 95, 100, 75, 70],
"Assignment:Chapter 5 Code Exercises (Real)",
[50, 100, 100, 100, 60, 70, 90, 100],
"Assignment:Chapter 6 Code Exercises (Real)",
[0, 85, 100, 100, 60, 85, 70, 85, 100],
"Assignment:Chapter 14 Code Exercises (Real)",
[75, 90, 100, 100, 0, 100, 0, 100],
"Assignment:Chapter 15 Code Exercises (Real)",
[97, 100, 100, 100, 0, 100, 0, 100]
]
I would like to convert this to:
[
["Assignment:Chapter 1 Code Exercises (Real)", 100, 100, 100, 100, 100, 100, 100, 100],
["Assignment:Chapter 2 Code Exercises (Real)", 93, 75, 100, 100, 100, 55, 75, 100],
["Assignment:Chapter 3 Code Exercises (Real)", 100, 80, 100, 100, 90, 85, 65, 100],
["Assignment:Chapter 4 Code Exercises (Real)", 100, 90, 100, 100, 95, 100, 75, 70],
["Assignment:Chapter 5 Code Exercises (Real)", 50, 100, 100, 100, 60, 70, 90, 100],
["Assignment:Chapter 6 Code Exercises (Real)", 0, 85, 100, 100, 60, 85, 70, 85], 100],
["Assignment:Chapter 14 Code Exercises (Real)", 75, 90, 100, 100, 0, 100, 0, 100],
["Assignment:Chapter 15 Code Exercises (Real)", 97, 100, 100, 100, 0, 100, 0, 100]
]
flatten
so too "flat". I also tried flatten(1).
Upvotes: 1
Views: 77
Reputation: 20776
> Hash[*a].map(&:flatten)
=>
[["Assignment:Chapter 1 Code Exercises (Real)", 100, 100, 100, 100, 100, 100, 100, 100],
["Assignment:Chapter 2 Code Exercises (Real)", 93, 75, 100, 100, 100, 55, 75, 100],
["Assignment:Chapter 3 Code Exercises (Real)", 100, 80, 100, 100, 90, 85, 65, 100],
["Assignment:Chapter 4 Code Exercises (Real)", 100, 90, 100, 100, 95, 100, 75, 70],
["Assignment:Chapter 5 Code Exercises (Real)", 50, 100, 100, 100, 60, 70, 90, 100],
["Assignment:Chapter 6 Code Exercises (Real)", 0, 85, 100, 100, 60, 85, 70, 85, 100],
["Assignment:Chapter 14 Code Exercises (Real)", 75, 90, 100, 100, 0, 100, 0, 100],
["Assignment:Chapter 15 Code Exercises (Real)", 97, 100, 100, 100, 0, 100, 0, 100]]
where a
is the first array above.
Alternatively, taking @CarySwoveland's recommendation:
a.each_slice(2).map(&:flatten)
is more efficient w/ both time and memory, and doesn't require the strings to be unique.
Upvotes: 2
Reputation: 106792
array.each_slice(2).map { |(x,y)| [x] + y }
#=> [["Assignment:Chapter 1 Code Exercises (Real)", 100, 100, 100, 100, 100, 100, 100, 100],
# ["Assignment:Chapter 2 Code Exercises (Real)", 93, 75, 100, 100, 100, 55, 75, 100],
# ["Assignment:Chapter 3 Code Exercises (Real)", 100, 80, 100, 100, 90, 85, 65, 100],
# ["Assignment:Chapter 4 Code Exercises (Real)", 100, 90, 100, 100, 95, 100, 75, 70],
# ["Assignment:Chapter 5 Code Exercises (Real)", 50, 100, 100, 100, 60, 70, 90, 100],
# ["Assignment:Chapter 6 Code Exercises (Real)", 0, 85, 100, 100, 60, 85, 70, 85, 100],
# ["Assignment:Chapter 14 Code Exercises (Real)", 75, 90, 100, 100, 0, 100, 0, 100],
# ["Assignment:Chapter 15 Code Exercises (Real)", 97, 100, 100, 100, 0, 100, 0, 100]]
Upvotes: 4