Edited at

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

More than 1 year has passed since last update.


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を利用して、配列の中に順番に入れていきました。