Hi Christer,
don't take this to serious:
a = [[1,3],[1,4,5]]
p (0...a.size).zip(a).inject(){|s, b| b[1].each{|i| (s[i] ||= ) <<
b[0]}; s}
=> [nil, [0, 1], nil, [0], [1], [1]]
cheers
Simon
···
From: list-bounce@example.com
[mailto:list-bounce@example.com] On Behalf Of Christer Nilsson
Sent: Tuesday, December 13, 2005 3:44 PM
To: ruby-talk ML
Subject: Array.invertI would like to see invert "rubyfied".
(Yes, I'm trying to get a grip of what this word meansclass Array
def invert
res=
for i in 0...self.size
if self[i] != nil then
for b in self[i]
res[b] = if res[b].nil?
res[b] << i
end
end
end
res
end
endrequire 'test/unit'
class TestArray < Test::Unit::TestCase
def test_invert_1
a = [[1,3],[1,4,5]]
b = [nil,[0,1],nil,[0],[1],[1]]
assert_equal b,a.invert
assert_equal a,b.invert
enddef test_invert_2
a =
a << [3,9,13] # 0
a << [3,11,14] # 1
a << [3,14,15] # 2
a << [4,1,4] # 3
a << [4,8,9] # 4
a << [5,0,1] # 5
a << [6,6,7] # 6
a << [14,2,6] # 7
a << [10,5,8,12,15] # 8
a << [10,10,11,12,13] # 9
a << [11,0,3,7,10] # 10
a << [17,2,3,4,5] # 11# behead...
c = a.map {|head, *tail| tail}b =
b << [5,10] # 0
b << [3,5] # 1
b << [7,11] # 2
b << [10,11]# 3
b << [3,11] # 4
b << [8,11] # 5
b << [6,7] # 6
b << [6,10] # 7
b << [4,8] # 8
b << [0,4] # 9
b << [9,10] # 10
b << [1,9] # 11
b << [8,9] # 12
b << [0,9] # 13
b << [1,2] # 14
b << [2,8] # 15assert_equal b,c.invert
assert_equal c,b.invertend
endChrister
--
Posted via http://www.ruby-forum.com/\.