gpt4 book ai didi

list - 如何以惯用的方式在 Scala 中创建嵌套的 toSet?

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

是否有更惯用的方法将嵌套的序列序列更改为嵌套的集合?

def toNestedSet[T](tsss: Seq[Seq[Seq[T]]]): Set[Set[Set[T]]]  = 
tsss.map(_.map(_.toSet).toSet).toSet

是否可以实现一个可以处理任何深度列表的函数?

最佳答案

这实际上一点也不差(请参阅 my answer here 到类似的问题,以了解有关此方法的一些额外讨论):

trait Setsifier[I, O] { def apply(i: I): O }

object Setsifier {
def apply[I, O](f: I => O) = new Setsifier[I, O] { def apply(i: I) = f(i) }

implicit def base[I](implicit ev: I <:!< Seq[_]) = apply((_: Seq[I]).toSet)

implicit def rec[I, O](implicit s: Setsifier[I, O]) =
apply((_: Seq[I]).map(s(_)).toSet)
}

def setsify[I, O](i: I)(implicit s: Setsifier[I, O]) = s(i)

进而:
scala> println(setsify(Seq(Seq(Seq(Seq(1)), Seq(Seq(2, 3))))))
Set(Set(Set(Set(1)), Set(Set(2, 3))))

静态类型为 Set[Set[Set[Set[[Int]]]]和所有。

好吧,我撒了一点谎。 <:!<以上实际上不在标准库中。它在 Shapeless ,但是,或者您可以非常非常轻松地自己定义它:
trait <:!<[A, B]

implicit def nsub[A, B] : A <:!< B = new <:!<[A, B] {}
implicit def nsubAmbig1[A, B >: A] : A <:!< B = sys.error("Don't call this!")
implicit def nsubAmbig2[A, B >: A] : A <:!< B = sys.error("Don't call this!")

这就是全部。

关于list - 如何以惯用的方式在 Scala 中创建嵌套的 toSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21705163/

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