从存储库创建随机硬币列表

creating a random list of coins from a repository

我正在尝试构建一个简单的应用程序,它会为我在文本字段中键入的每个用户显示一个硬币 collection。硬币 collection 必须对每个用户都是唯一的。我已经有了硬币的存储库。如何为每个用户生成一个新的随机硬币 collection?每个 collection 可以有多个价值相同但年份不同的硬币。

object CoinRepository {

fun getCoinCollection(): List<Coin> {
    return listOf(
        Coin(
            id = 1,
            name = "Penny",
            year = (1900..2022).random()
        ),
        Coin(
            id = 2,
            name = "Nickel",
            year = (1900..2022).random()
        ),
        Coin(
            id = 3,
            name = "Dime",
            year = (1900..2022).random()
        ),
        Coin(
            id = 4,
            name = "Quarter",
            year = (1900..2022).random()
        ),
        Coin(
            id = 5,
            name = "Dollar",
            year = (1900..2022).random()
        )
    )
}

}

data class Coin(
val id: Int,
val name: String,
val year: Int

)

你可以这样做:

import kotlin.random.Random

// Define your specific data in an enum, with all the relevant properties
enum class Denomination(val id: Int, val label: String) {
    PENNY(1, "Penny"),
    NICKEL(2, "Nickel"),
    DIME(3, "Dime"),
    QUARTER(4, "Quarter"),
    DOLLAR(5, "Dollar");
    
    companion object {
        // a simple way to return one of the instances at random - the property
        // avoids creating a new values() array every time it's called
        val values = values()
        fun random() = values.random()
    }
}

// a basic way to keep the random date logic in the Coin class itself, using
// a default parameter. No validation involved obviously!
data class Coin(val id: Int, val label: String, val year: Int = (1900..2022).random())

// get a random number of Coins, within a certain min/max
fun getCoinCollection() = List(Random.nextInt(1, 10)) {
    // pulls a random coin type and creates a Coin, letting its constructor
    // handle the random date (you could do it here if you want)
    Denomination.random().run { Coin(id, label) }
}

组织它的方法不止一种,我在其中添加了一些东西,这样您就可以了解如何进行。但它基本上是一个创建随机长度列表(在限制范围内)的函数,然后使用随机 Denomination

为每个项目创建一个 Coin

Denomination 枚举只是定义数据的一种方式,是一组具有特定属性的可能项目的固定集合。因为枚举会自动生成 values() 数组(包含它的所有实例),所以您可以轻松地随机选择一个。您还可以在此处扩展属性,以包括每种硬币类型的有效日期范围等

可以 直接从枚举的 nameordinal 属性(例如"PENNY"0) 所以你不需要显式声明它们 - 我觉得将数据与其在代码中的枚举中的表示方式分离通常是个好主意,但这是你的电话 -我已经包含它,所以你可以看到如何