我是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/