LoginSignup
2
0

More than 5 years have passed since last update.

joinメソッドを解剖してみる

Last updated at Posted at 2018-07-01

joinメソッドが使えない実装があったため

開発中にjoinメソッドが利用できない要件があったため、joinと同じ動きをさせ、かつちょい改良したものを作りました。
いろいろ勉強になったので、メモります。というかメソッドに頼りすぎるのもよくないと痛感。

配列内にある名前を羅列し、かつ間に入れる文字を交互にする

題名だとわかりづらいですが、要は

"鈴木","田中";"山本","神崎";"中村"
という形で、文字列をだすという要件でした。

初期は、

ruby.rb

class Connector

  attr_accessor :delim

  def initialize
    @connector = []
  end

  def push(str)
    @connector.push(str)
  end

  def connect
    @connector.join(@delim)
  end

end

connector = Connector.new
connector.push("鈴木")
connector.push("田中")
connector.push("山本")
connector.delim = ","
puts connector.connect

#=> 鈴木,田中,山本

だったのですが、,と;を交互に出すとなるとjoinが利用できません。

ruby.rb

class Connector

  attr_accessor :delim

  def initialize
    @connector = []
    @delim = []
  end

  def push(str)
    @connector.push(str)
  end

  def connect
    connected = ""
    @connector.each_with_index do |connector, index|
    index += 1
    connected += index.to_s
    connected += "."
      if index == @connector.size
        connected += connector
      else
        if index % 2 != 0
          connected += connector
          connected += @delim[0]
        elsif index % 2 == 0
          connected += connector
          connected += @delim[1]
        end
      end
    end
    connected
  end
end


connector = Connector.new
connector.push("鈴木")
connector.push("田中")
connector.push("山本")
connector.push("神崎")
connector.push("中村")
connector.delim.push(",")
connector.delim.push(";")
puts connector.connect

#=> 鈴木,田中;山本,神崎;中村

each_with_indexを利用して、配列の中に順番に入れていきました。

2
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0