scala - 在Scala中重复列表

标签 scala

我是Scala新手。我决定写一个蜘蛛纸牌求解器作为第一步练习,以学习一般的语言和函数式编程。

我想生成一个随机洗牌的纸牌,其中包含1套,2套或4套西装。这是我想出的:

val numberOfSuits = 1
(List("clubs", "diamonds", "hearts", "spades").take(numberOfSuits) * 4).take(4)

应该返回
List("clubs", "clubs", "clubs", "clubs")
List("clubs", "diamonds", "clubs", "diamonds")
List("clubs", "diamonds", "hearts", "spades")

取决于numberOfSuits的值,除了没有可以找到的列表“乘法”操作。我想念了吗?在改组之前是否有更好的方法来生成完整的牌组?

顺便说一句,我计划在西装上使用枚举,但是用字符串键入问题比较容易。我将使用上面生成的列表,并使用进行理解,遍历西服和类似的卡片“等级”列表以生成完整的卡片组。

最佳答案

您应该在scaladoc中查找对象List。它具有各种有趣的方法来创建列表。例如,以下代码完全可以实现您想要的目的:

List.flatten(List.make(4, List("clubs", "diamonds", "hearts", "spades").take(numberOfSuits))).take(4)

但是,一个更好的代码是(Scala 2.7):
val suits = List("clubs", "diamonds", "hearts", "spades")
List.tabulate(4, i => suits.apply(i % numberOfSuits))

在Scala 2.8上,使用tabulate编码,因此正确的语法为:
List.tabulate(4)(i => suits.apply(i % numberOfSuits))

关于scala - 在Scala中重复列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491928/

相关文章:

java - 寻找适用于 scala、java 或 python 的通用 Oauth 库

scala - sbt 的命令行参数是什么?

arrays - 二维scala数组迭代

web-services - 为什么 lift Web 框架具有可扩展性?

scala - 使用sbt-assembly将供应商信息添加到MANIFEST.MF

java - 如何在 Scala 中编写 Pig UDF

web-services - 限制并发Web Service请求(或某些批处理方法)

scala - 在 Scala 中使用基于类型的过滤器时如何获得正确的返回类型

scala - 记录到 Scala/akka 中的文件 : ClassNotFoundException: akka. event.slf4j.Slf4jLoggingFilter

scala - 有没有办法根据 Akka(Scala) 中的存储大小来路由消息