From: Florian Frank Date: 2004-04-21T11:17:03+09:00 Subject: Re: efficient collect+compact ? On 2004-04-21 10:29:07 +0900, Martin Pirker wrote: > puts [1,2,3,4,5,6,7,8,9,10].collect{ |x| next if x % 2 == 0; x+10 }.compact > or > puts [1,2,3,4,5,6,7,8,9,10].collect!{ |x| next if x % 2 == 0; x+10 }.compact! This is perhaps better: [1,2,3,4,5,6,7,8,9,10].inject([]) { |s, x| x % 2 == 0 ? s : s << x + 10 } At least the created temporary array is smaller. -- c, s, x = gets, c[0, 2].to_i, "dsfd;kfoA,.iyewrkldJKDHSUB" puts (1...(c.size / 2)).inject("") do |p, i| p << (c[2 * i, 2].to_i(16) ^ x[(s += 1) && s -1]) end