У меня есть более 2000 строк (ID1 ID2), которые разделены пробелом каждая строка из текстового файла. Размер обоих ID1 и 2 равен 100.
//My load file codes
def loadFile(file:Iterator[String]):Set[(Int,Int)] = {
val z1 = file.map(line =>line.split(" ") match {
case Array(id1,id2)=>(id1.toInt,id2.toInt)
}).toSet
z1
}
Я загружаю их как Set(Tuples(ID1, ID2))
. Поскольку в моем наборе более 4 элементов, здесь он обозначен как HashSet.
myData = HashSet((15,88), (56,66), (92,68), (27,4), (84,14), (88,17), (6,47), (97,45), (96,41), (21,66), (65,10), (44,66), (2,9), (86,61),...)
Цель моего кода - найти , который ID2 участвует / содержит / пересекается в КАЖДОМ ID1 . Наконец, распечатайте ID2
, т.е. (ID1_1,ID2_EVERYONE),(ID1_2,ID2_EVERYONE), (ID1_3,ID2_EVERYONE), (ID1_4,ID_EVERYONE), ... ,(ID1_100,ID2_EVERYONE)
print ID_EVERYONE
ОБНОВЛЕНО Здесь, чтобы указать меньший размер группы в моем примере, для size = 5 ,
(1,5), (2,5), (3,5),(4,5),(5,5),
(1,4), (2,4), (3,4),(4,4),(5,4),
(5,4), (4,5)
Для условия: ID_1 (от 1 до 5) все они распознают 4 и 5. А ID_1 = 4 & 5 позволяет только знать друг друга. Наконец, распечатайте ID 4 и 5.
Обновлено V2
(37,52), (37,37), (37,45), (37,14)
(52,37), (52,52), (52,45), (52,14)
(14,20), (14,14), (14,12), (14,4), (14,49), (14,91), (14,45), (14,54), (14,52), (14,37)
(45,45), (45,52), (45,14), (45,37)
Из кодов @ jwvh:
myData.groupMap (_. 1) ( ._ 2) .values.reduce (_ intersect _)
Это помогает получить данные выше. Однако обратите внимание, что ID14 знает дополнительный идентификатор, отличный от ID 37,52,45 и самого . Следовательно, ID14 также следует отфильтровать.