gpt4 book ai didi

Scala:只映射元组中的第一个元素

转载 作者:行者123 更新时间:2023-12-04 15:54:12 26 4
gpt4 key购买 nike

我想在元组上使用一些函数,它返回只有第一个元素转换而其他元素不变的元组。

这是 Tuple2 的天真版本:

def mapFirst[T, U, R](tuple: (T, U))(f: T => R): (R, U) = tuple match {
| case (x, y) => f(x) -> y
| }

mapFirst((1, 2))(_ * 5) // returns (5, 2)

虽然,它感觉不是原生的,但我想要的是这样写:
(1, 2).mapFirst(_ * 5)

然后我写了隐式转换:
class RichTuple[T, U](tuple: (T, U)) {
def mapFirst[R](f: T => R): (R, U) = tuple match {
case (x, y) => f(x) -> y
}
}

implicit def tuple2RichTuple[T, U](tuple: (T, U)): RichTuple[T, U] = new RichTuple(tuple)

(1, 2).mapFirst(_ * 5)

然后,当我只想映射 Tuple3 上的第二个元素或第一个元素时,我将不得不再次编写相同的样板。是否有一些内置了此类方法的库?

最佳答案

您可以使用无形元组函数:

import shapeless._
import syntax.std.tuple._
val x=(1,2,3)
val y=x.updatedAt(0,x.head*5)
// y= (5,2,3)

关于Scala:只映射元组中的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43126146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com