rubyのinjectにはバグがあるのか?
>> [1, 2, 2, 3, 2].inject([]){|a,i|a<<i} => [1, 2, 2, 3, 2] >> [1, 2, 2, 3, 2].inject([1]){|a,i|p a;p a[-1];a<<i} [1] 1 [1, 1] 1 [1, 1, 2] 2 [1, 1, 2, 2] 2 [1, 1, 2, 2, 3] 3 => [1, 1, 2, 2, 3, 2] >> [1, 2, 2, 3, 2].inject([1]){|a,i|p a;p a[-1];a<<i if i!=a[-1]} [1] 1 nil NoMethodError: undefined method `[]' for nil:NilClass from (irb):204 from (irb):204:in `inject' from (irb):204:in `each' from (irb):204:in `inject' from (irb):204 from :0 >> [1, 2, 2, 3, 2].inject([1]){|a,i|b=a.dup;p a;p b[-1];a<<i if i!=b[-1]} [1] 1 TypeError: can't dup NilClass from (irb):205:in `dup' from (irb):205 from (irb):205:in `inject' from (irb):205:in `each' from (irb):205:in `inject' from (irb):205 from :0
わからない…このへんすごく怪しい。
injectがおかしいせいで
>> a=[];(r="1 2 3 5 7 8".split(/\s+/)).unshift("E").zip(r[1,r.size].push("E")).map{|i|(i[0]!="E"&&i[1].to_i==i[0].to_i+1)?"-":i}.flatten[1..-2].map{|i|a<<i if a[-1]!=i};a => ["1", "-", "3", "5", "7", "-", "8"]
がすすめない…まあ、コードが懲りすぎなんだけど haskell意識しすぎた。
http://builder.japan.zdnet.com/sp/ruby-doukaku-panel/story/0,3800086254,20369264,00.htm
gsubつかったらかっこわるい。
>> a=[];(r="1 2 3 5 7 8".split(/\s+/)).unshift("E").zip(r[1,r.size].push("E")).map{|i|(i[0]!="E"&&i[1].to_i==i[0].to_i+1)?"-":i}.flatten[1..-2].map{|i|a<<i if a[-1]!=i};a.join(",").gsub(/,-,/,"-") => "1-3,5,7-8"
もうおそいからやめた。