Hatena::Grouphackerscafe

yuisekiの日記

 | 

2008-10-14

曜日配列に抜けがあると悲惨

21:24 | 曜日配列に抜けがあると悲惨 - yuisekiの日記 を含むブックマーク はてなブックマーク - 曜日配列に抜けがあると悲惨 - yuisekiの日記 曜日配列に抜けがあると悲惨 - yuisekiの日記 のブックマークコメント

うへぇ。

さっきの配列は、カウントが0のときの曜日が抜けていた。

ないものを0におきかえておいてあげないとnullエラーになってしまう。

単純な配列だったらmerge!とかで抜けを補完できるけど、入れ子配列構造になっているので結局caseを使うしかなくなった。。

     full_week=[]
     dayofweek.each do |dayname|
       def_day = ["0", dayname]
       full_week.push(def_day)
     end
     0.upto(week.size-1) do |i|
       day = week[i]
       case day[1]
       when "Sun"
         full_week[0] = day
       when "Mon"
         full_week[1] = day
       when "Tue"
         full_week[2] = day
       when "Wed"
         full_week[3] = day
       when "Thu"
         full_week[4] = day
       when "Fri"
         full_week[5] = day
       when "Sat"
         full_week[6] = day
       end
     end

きもちわるいわーー。

曜日順にソート

18:28 | 曜日順にソート - yuisekiの日記 を含むブックマーク はてなブックマーク - 曜日順にソート - yuisekiの日記 曜日順にソート - yuisekiの日記 のブックマークコメント

配列などで、曜日がStringクラスで入っているときにsortするとアルファベット順になってしまう。

caseなどでちまちま条件判定してたら発狂するわーとおもったら、rubyには曜日名を配列として持った定数があるらしい。

英語省略形のばあいは、Date::ABBR_DAYNAMES。

これをつかってループすればなんとかソートできそうだ。

require 'date'
week = [[13,"Sun"],[24,"Mon"],[],[],[],[],[]]
dayofweek = Date::ABBR_DAYNAMES
sort_week=[]
0.upto(6) do |i|
  week.each do |elem|
    sort_week[i] = elem if elem[1] === dayofweek[i]
  end
end

こんなかんじ??

 |