決裁月から今年度の月を割り出す

もっといい方法はあるだろうけど、作ったので載せておきました。
末日の判定等は今回必要なかったのでつけていません。
引数dayはdate,deadlineは月のintで

#決裁月から今年度を割り出す(返り値は[{"01"=>"2012"},{"02"=>"2012"}…])
def set_current_year(day=nil,deadline=nil)
  month = day.month
  year = day.year
  month_array = []
  if month <= deadline
    i = 0
    while i < month
      i += 1
      if i > 9
        month_array << {i.to_s => (year.to_i).to_s}
      else
        month_array << {"0" + i.to_s => (year.to_i).to_s}
      end
    end
    l = 1
    while month + l < 13
      if month + l > 9
        month_array << {(month + l).to_s => (year.to_i - 1).to_s}
      else
        month_array << {"0" + (month + l).to_s => (year.to_i - 1).to_s}
      end
      l += 1
    end
  elsif month > deadline
    i = 1
    while deadline + i <= month
      if deadline + i > 9
        month_array << {(deadline + i).to_s => (year.to_i).to_s}
      else
        month_array << {"0" + (deadline + i).to_s => (year.to_i).to_s}
      end
      i += 1
    end
  end
  return month_array
end

Hashでほしい場合は

#決裁月から今年度を割り出す(返り値は{20120101=>"2012-01-01",20120201=>"2012-02-01"…})
def set_array_in_hash_current_year_pattern_date(day=nil,deadline=nil)
  month = day.month
  year = day.year
  month_array = {}
  if month <= deadline
    i = 0
    while i < month
      i += 1
      if i > 9
        month_array[((year.to_i).to_s + i.to_s + "01").to_i] = (year.to_i).to_s + "-" + i.to_s + "-" + "01"
      else
        month_array[((year.to_i).to_s + "0" + i.to_s + "01").to_i] = (year.to_i).to_s + "-0" + i.to_s + "-" + "01"
      end
    end
    l = 1
    while month + l < 13
      if month + l > 9
        month_array[((year.to_i - 1).to_s + (month + l).to_s + "01").to_i] = (year.to_i - 1).to_s + "-" + (month + l).to_s + "-" + "01"
      else
        month_array[((year.to_i - 1).to_s + "0" +  (month + l).to_s + "01").to_i] = (year.to_i - 1).to_s + "-0" + (month + l).to_s + "-" + "01"
      end
      l += 1
    end
  elsif month > deadline
    i = 1
    while deadline + i <= month
      if deadline + i > 9
        month_array[((year.to_i).to_s + (deadline + i).to_s + "01").to_i] = (year.to_i).to_s + "-" + (deadline + i).to_s + "-" + "01"
      else
        month_array[((year.to_i).to_s + "0" + (deadline + i).to_s + "01").to_i] = (year.to_i).to_s + "-0" + (deadline + i).to_s + "-" + "01"
      end
      i += 1
    end
  end
  return month_array
end

Ruby 配列に要素を追加する

列を生成した後で要素を追加する場合は、Array#<<メソッド、Array#unshiftメソッド、Array#pushメソッドを使用します。

Array#<<メソッドは配列の最後に、Array#unshiftメソッドは配列の最初に要素を追加することができます。

a = [1,2,3,4,5] #=> [1,2,3,4,5]
a << 99 #=> [1,2,3,4,5,99]
a.unshift(99) #=> [99,1,2,3,4,5,99]

引用元: 逆引きRuby – 配列.

Ruby 配列から重複した要素を取り除く

配列から重複した要素を取り除く

Array#uniqメソッドにより重複した要素を配列から取り除くことができます。Array#uniqメソッドには破壊的メソッドArray#uniq!が用意されています。


a = [30,20,50,30,10,10,40,50]

p a.uniq #=> [30, 20, 50, 10, 40]

a = ["/tmp","/home/","/etc","/tmp"]

a.uniq! #=> ["/tmp", "/home", "/etc"]

引用元: 逆引きRuby – 配列.