基于另一个数组

时间:2015-12-10 05:03:59

标签: scala scala-collections

我有两种类型的数组: 数组一,

数组(productId,categoryId)

   (2, 423) 
   (6, 859)
   (3, 423)
   (5, 859)

和另一个数组Array((productId1,productId2),count)

   ((2, 6), 1), ((2, 3), 1), ((6, 5), 1), ((6, 3), 1)

我想基于第一个数组过滤第二个数组, 首先,我想检查数组2以查看具有相同类别的productId1和productId2是否保留,否则将过滤掉该元素。 因此,上面的列表将被过滤以保留:

   ( ((2, 3), 1), ((6, 5), 1) )

有人可以帮我这个吗?非常感谢你。

1 个答案:

答案 0 :(得分:2)

如果您不介意将第一个数组用作地图,即:

scala> val categ_info = cats = Array((2, 423), (6, 859), (3, 423), (5, 859)).toMap
categ_info: Map[Int, Int] = Map(2 -> 423, 6 -> 859, 3 -> 423, 5 -> 859)

然后我们(为方便起见,将示例数据设置为简单的Int):

val data = Array(((2, 6), 1), ((2, 3), 1), ((6, 5), 1), ((6, 3), 1))

data.filter { case ((prod1_id, prod2_id), _) => 
    categ_info(prod1_id) == categ_info(prod2_id) 
}
制造

res2: Array[((Int, Int), Int)] = Array(((2, 3), 1), ((6, 5), 1))

按要求。