2012-04-20 61 views
1

有沒有一個類表示Ruby中的無序數組?我不能使用數組,因爲:Ruby中的無序陣列

[1,2] != [2,1] 

而且我不能使用set,因爲我只能擁有唯一的元素。我想要一種兩種組合。一個不關心排序的列表,並且可以有多個相同的元素。

回答

4

我想你已經擴展了Array類並編寫了你自己的==方法。這是我非常實驗性的嘗試:

class UnorderedArray < Array 
    def ==(other) 
    self_copy = self.sort 
    other = other.sort 
    self_copy == other 
    end 
end 

a = UnorderedArray.new 
a << 1 << 2 
# [1, 2] 

b = UnorderedArray.new 
b << 2 << 1 
# [2, 1] 

a == b 
# returns true 
+0

我認爲這是一個更好,更容易的想法,而不是有一個新的寶石 – texasbruce 2012-04-20 07:49:30

0

一襯墊:

Hash[a.zip(a.map{|x| a.count(x)})] == Hash[e.zip(e.map{|x| e.count(x)})] 
0

這裏有一個稍微吸塵器混入,將上不可排序陣列工作,並且將緩存的散列值,因爲它爲O(n)。

class UnorderedArray < Array 
    def hash 
    unless @o && @o == super.hash 
     p = Hash.new(0) 
     each{ |v| p[v] += 1 } 
     @p = p.hash 
     @o = super.hash 
    end 
    @p.hash 
    end 
    def <=>(b) 
    raise "You can't order me" 
    end 
    def ==(b) 
    hash == b.hash 
    end 
end 

但是#eql?將返回false,除非數組的順序相同。