说我有3个(或更多)人的连接列表。称他们为Max,Jeff和Steve。
例如,每个都有一个连接列表。
最大 - >弗兰克,苏
杰夫 - >苏,杰瑞,卡罗琳
史蒂夫 - >卡罗琳,爱丽丝,鲍勃
鉴于这些列表,我想要返回任何出现的交叉点。
所以我会回来[苏,卡罗琳],因为马克斯和杰夫在苏和杰夫相交,史蒂夫和卡罗琳相交。
我在Ruby编程,因此可能有自己很酷的,特殊的方式来做这样的事情,或者我将不得不编写自己的算法来获取这些。我把它想象成如下图所示。
那么找到这些交叉点的好方法是什么,我将它们列在列表中?是否有一种很好的红宝石方式可以说:Max.connections& Jeff.connections& Steve.connections或者制作图表并对它们进行排序会很好。
谢谢!
答案 0 :(得分:1)
假设你有:
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"]