Rubyでeach_slice(i)を作ってみた

あったら便利!だけど使う頻度が低い。そしたら覚えるための脳記憶領域がもったいない。でもやっぱり覚えていたら便利…。新配列とeachでなんとか作れる頭を手に入れたいです。だいたいこんな感じかな?というのは浮かんでます。ということで作ってみました。

記憶力が高いというのは有利ですよね。プログラミングやIT業界に限らず…悲笑。

それはさておき「自分で作れるようにしとけばいい!」ということです。

やってみて思ったこと

「自分で作ることって大事かも…」

要は、作成過程で「ない頭」をめちゃめちゃ回すします悲笑…。
それが大事なのかもと思いました。車輪の再開発ということですが、このくらいなら無駄ではなく、むしろ頭の訓練としていい刺激になる気がします。

書いてみると、やり方は決まっていなくて、同じ結果を出すのにいくつか思いつきました。下記はそのうちの一つです。

【Rubyコード】

require "pp"

=begin
考え方としては3つの配列を作って、new_arrayにぶっこむ。
3つになったら拒否する。次の配列を作る。
値がなくなったら、nilしてbreakする?
とにかく3つずつ分けるという考え方ではなく、3つ詰め込んで拒否ってnew_aarayに追加
という感じでやってみる!
まだやってないけど、入れ子になるっぽいな…入れ子苦手。
いやならないかもな。考え方は人それぞれか。
「3つになったら追加、3つになったら追加…」?
=end

new_array = []
kari_array = []

array = ["a", "b", "c", "d", "e", "f", "g", "h",]

=begin
#これだと[["a", "b", "c"], ["d", "e", "f"]]が出力になります。
#gとhはkari_arrayに入ったあとに行き場がない状態です。
array.each do |x|

    #3つのデータがある配列を作る。
    unless kari_array.length == 3
    kari_array << x

    else #kari_arrayが3つになら…

    new_array << kari_array
    kari_array = []
    kari_array << x

    end

end

pp new_array
=end

puts "gとh、すなわちeachの最終後始末が必要です。"
puts "とりあえずインデックス番号をとって、利用してみる"

array.each.with_index do |x, i|

    #3つのデータがある配列を作る。
    #unlessにはelsif的なものがないと判明。確かにいままで短いRuby人生で見たことないかも、elsunless笑。
    if kari_array.length != 5
        if array[-1] == array[i] #最終処理, またnilを入れるといいかも?
            kari_array << x
            #kari_array << [x, nil]
            #kari_array.flatten!
            new_array << kari_array
        else
            kari_array << x
        end

    else

        new_array << kari_array
        kari_array = []
        kari_array << x

    end

end

pp new_array

puts "これはeach_slice"
array.each_slice(5) do |x|
  p x
end

#new_array = [["a", "b", "c"], ["d", "e", "f"], ["g", "h", ""]]

each_slice(i)と同じように使用頻度が低いzipメソッドも丸暗記と覚悟していたが、「考え方を作ってみる」ことにしました。

というより、「自作each_slice()」作っているときに思いついたんですが。

といことでzipメソッドも作ってみました。↓

タイトルとURLをコピーしました