如何比较Scala中的两个整数数组?

时间:2018-04-28 19:53:36

标签: scala

在第一个数组中找到一个数字,其数字为秒。如果找不到数字则立即降低。

val a = List(1,2,3,4,5,6,7,8,9)
val b = List(1,5,10)
比较a与b

后的预期输出
1 --> 1
2 --> 1
3 --> 1
4 --> 1
5 --> 5
6 --> 5
7 --> 5
8 --> 5
9 --> 5

由于

2 个答案:

答案 0 :(得分:2)

您可以使用TreeSetto()lastOption方法,如下所示:

val a = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
val b = List(1, 5, 10)

import scala.collection.immutable.TreeSet

// Convert list `b` to TreeSet
val bs = TreeSet(b.toSeq: _*)

a.map( x => (x, bs.to(x).lastOption.getOrElse(Int.MinValue)) ).toMap
// res1: scala.collection.immutable.Map[Int,Int] = Map(
//   5 -> 5, 1 -> 1, 6 -> 5, 9 -> 5, 2 -> 1, 7 -> 5, 3 -> 1, 8 -> 5, 4 -> 1
// )

请注意,无需列出ab列表。

答案 1 :(得分:0)

以下是使用collect函数

的另一种方法
val a = List(1,2,3,4,5,6,7,8,9)
val b = List(1,5,10)
val result = a.collect{
  case e if(b.filter(_<=e).size>0) => e -> b.filter(_<=e).reverse.head
}
//result: List[(Int, Int)] = List((1,1), (2,1), (3,1), (4,1), (5,5), (6,5), (7,5), (8,5), (9,5))

此处为a中的每个元素检查b中是否有一个数字,即大于或等于reverse filter列表并获取其head使它成为一对。