以前、each_slice(i)を自作しました。こちらです。
【Rubyコード】
require "pp"
#zipを自作してみる
=begin
考え方
一気にしようとするんじゃなくて、一つの配列ずつ処理していく。
二段階に分けて最終形を作成する
array_1 = ["a", "b", "c"]
array_2 = ["x", "y", "z"]
array_final = []
=end
#■元配列
array_1 = ["a", "b", "c", "d","e", "f", "g", "h"]
array_2 = ["x", "y", "z", "tome", "sapporo", "shibetsu"]
array_final = []
#■目標配列
#array_final = [["a", "x"], ["b", "y"], ["c", "z"], ["d", nil]]
#■array_1から処理する(原則、長い方から処理すること)
array_1.each do |x|
array_final << [x, nil]
end
puts "第一処理"
p array_final
puts "-------------------------------\n\n"
#■失敗作
=begin
#これはだめ。とりあえず書いてみた
#とりあえず書くことで何がダメか、考え方のダメな部分がわかるから良しとする。
array_2.each do |x|
array_final.each do |target|
target[1] = x
end
end
p array_final
=end
#■失敗をもとに改めてロジックを考える
=begin
timeかuptoか?
2つ目の長さを取得し、uptoする
0から「長さ - 1」
=end
len = array_2.length
0.upto(len - 1) do |i|
array_final[i][1] = array_2[i]
end
puts "第二処理(自作zipメソッドが完成)"
p array_final
puts "-------------------------------\n\n"
puts "ちなみにzipメソッドを使った場合はこちら"
p array_1.zip(array_2)
puts "あれ?嬉しいことに「見た目」は同じ結果になりました。"
とりあえず良しとする。
考え方が大事か?