gpt4 book ai didi

scala - 在scala中将序数分配给序列而不进行后递减

转载 作者:行者123 更新时间:2023-12-02 09:21:45 25 4
gpt4 key购买 nike

由于我是 Scala 的新手,我在谷歌上搜索了很多东西,并在大多数情况下找到了很好的答案。但我找不到这个具体问题的答案,因为谷歌搜索“scala 中的后递减”只会将 dontcha-use-post-decrement-in-scala-because-its-a-function-language-answers 带到顶部。

所以,我真的很想知道执行以下操作的功能方式是什么:

object A {
val list = List("a", "b", "c")
val map = {
var ord = list.size
Map(list map { x => (x, { val res = ord; ord -= 1; res } ) } : _* )
}
}

class Test extends org.scalatest.FunSuite {
test("") {
println(A.map) // Map(a -> 3, b -> 2, c -> 1)
}
}

它基本上是从给定列表创建一个映射,并为列表中的每个元素分配递减的序数(实际代码当然比这个最小的示例更复杂)。

我对 var ord = ... (可变)和 { val res = ord; 非常不满意。序号 -= 1; res } (后递减)部分:/是否有另一种(更漂亮的)方法来做到这一点?

最佳答案

快速解决方案需要反转列表,然后您可以使用zipWithIndex:

scala> :pa
// Entering paste mode (ctrl-D to finish)

List("a", "b", "c")
.reverse
.zipWithIndex
.toMap

// Exiting paste mode, now interpreting.

res4: scala.collection.immutable.Map[String,Int] = Map(c -> 0, b -> 1, a -> 2)

如果您不介意额外集合的分配,您可以删除view

关于scala - 在scala中将序数分配给序列而不进行后递减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42063165/

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