我很高兴你问了。我希望Array在 Ruby 的未来版本中看到这样的方法添加到类中,因为我发现它有很多用途:
class Array
def difference(other)
h = other.each_with_object(Hash.new(0)) { |e,h| h[e] += 1 }
reject { |e| h[e] > 0 && h[e] -= 1 }
end
end
Run Code Online (Sandbox Code Playgroud)
这里给出了该方法的描述及其一些应用程序的链接。
举例来说:
a = [1,2,3,4,3,2,4,2]
b = [2,3,4,4,4]
a - b #=> [1]
a.difference b #=> [1,2,3,2]
Run Code Online (Sandbox Code Playgroud)
Ruby v2.7 为我们提供了方法Enumerable#tally,允许我们将方法的第一行替换为
h = other.tally
Run Code Online (Sandbox Code Playgroud)