From: Christer Nilsson Date: 2005-12-13T23:43:51+09:00 Subject: Array.invert I would like to see invert "rubyfied". (Yes, I'm trying to get a grip of what this word means :-) class 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 end require '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 end def 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] # 15 assert_equal b,c.invert assert_equal c,b.invert end end Christer -- Posted via http://www.ruby-forum.com/.