有沒有一個類表示Ruby中的無序數組?我不能使用數組,因爲:Ruby中的無序陣列
[1,2] != [2,1]
而且我不能使用set,因爲我只能擁有唯一的元素。我想要一種兩種組合。一個不關心排序的列表,並且可以有多個相同的元素。
有沒有一個類表示Ruby中的無序數組?我不能使用數組,因爲:Ruby中的無序陣列
[1,2] != [2,1]
而且我不能使用set,因爲我只能擁有唯一的元素。我想要一種兩種組合。一個不關心排序的列表,並且可以有多個相同的元素。
它被稱爲multiset。這裏是Ruby implementation。
我想你已經擴展了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
一襯墊:
Hash[a.zip(a.map{|x| a.count(x)})] == Hash[e.zip(e.map{|x| e.count(x)})]
這裏有一個稍微吸塵器混入,將上不可排序陣列工作,並且將緩存的散列值,因爲它爲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,除非數組的順序相同。
我認爲這是一個更好,更容易的想法,而不是有一個新的寶石 – texasbruce 2012-04-20 07:49:30