如何从两个元组序列构建一个Scala元组序列?

iswrvxsc  于 2023-02-04  发布在  Scala
关注(0)|答案(1)|浏览(225)

我有两个元组序列:

val seqA: Seq[(String, Long)] = Seq(("0", 123), ("1", 10))
val seqB: Seq[(String, Long)] = Seq(("0", 50), ("1", 75))

我需要通过元组比较Long参数的值来获得一个新的序列,比较准则是:如果seqB的整数严格大于seqA的整数,则仅保留seqB的整数。
对于"0"123严格大于50,因此我们保留123;另一方面,对于值"1"10小于50,因此我们消去该值。
预期结果如下:

val result: Seq[(String, Long)] = Seq(("0", 123))

有什么帮助或者建议吗?

vsnjm48y

vsnjm48y1#

您的描述与示例不同。您说您只需要保留seqB中的较大元素,但在示例中您只保留seqA中的元素。下面的解决方案基于示例,并给出了结果'List((“0”,123))。希望对您有所帮助。

val seqA: Seq[(String, Long)] = Seq(("0", 123), ("1", 10))
val seqB: Seq[(String, Long)] = Seq(("0", 50), ("1", 75))
seqA.lazyZip(seqB).flatMap {
    case ((aKey, aValue), (bKey, bValue)) if aKey == bKey =>
      if (aValue > bValue) {
        Some((aKey, aValue))
      } else {
        None
      }
    case _ =>
      None // keys don't match, I suppose we need to eliminate element too
  }

否则可以用Map解决,那么你就用不同的键来修复这个问题。

val seqA: Seq[(String, Long)] = Seq(("0", 123), ("1", 10))
val seqB: Seq[(String, Long)] = Seq(("0", 50), ("1", 75))
val seqBMap = seqB.toMap
seqA.filter {
  case (aKey, aValue) => seqBMap.get(aKey).exists(_ < aValue)
}

相关问题