假设我有 3 个(或更多)人的联系人列表。称他们为 Max、Jeff 和 Steve。
例如,他们每个人都有一个连接列表。
马克斯 -> 弗兰克,苏
杰夫 -> 苏、杰瑞、卡罗琳
史蒂夫 -> 卡罗琳、爱丽丝、鲍勃
鉴于这些列表,我想返回出现的任何交叉点。
所以我会返回 [Sue, Caroline],因为 Max 和 Jeff 在 Sue 处相交,而 Jeff 和 Steve 在 Caroline 处相交。
我正在用 Ruby 编程,所以它可能有自己很酷的、特殊的方式来做这样的事情,否则我将不得不编写自己的算法来获得这些。我将其视为如下图所示。
如果我一开始就在列表中找到这些交叉点,那么找到这些交叉点的好方法是什么?是否有一种很好的 ruby 方式来表示:Max.connections & Jeff.connections & Steve.connections 或者制作图表并像那样对它们进行排序会更好吗?
谢谢!
最佳答案
假设你有:
h = {
"Max" => ["Frank", "Sue"],
"Jeff" => ["Sue", "Jerry", "Caroline"],
"Steve" => ["Caroline", "Alice", "Bob"],
}
h
中的每个数组不包含重复项。然后,要在数组中查找重复项,您可以执行以下操作:
h.values.flatten.group_by{|e| e}.values.select{|a| a.length > 1}.map(&:first)
# => ["Sue", "Caroline"]
关于ruby - 寻找许多连接的交集(图形算法?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558341/