kotlin - 在 Kotlin 中初始化集合更惯用的方法是什么?

标签 kotlin initialization set

我有一组单元格
数据类 Cell(val i: Int, val j: Int)
我在我的类(class)中像这样初始化

protected val board = mutableSetOf<Cell>()
init {
    for (i in 1..width) {
        for (j in 1..width) {
            board += Cell(i, j)
        }
    }
}

是否有更惯用的(功能性)方法来初始化集合?
理想情况下,我希望该集合是不可变的,因为在初始化之后它永远不应该更改。

最佳答案

您可以定义一个扩展,它接受一个转换器来获取一对整数的组合,然后将其映射到一个Cell。例如:

inline fun <R> IntRange.combine(block: (Int, Int) -> R): Set<R> {
    return flatMap { x -> map { y -> block(x, y) } }.toSet()
}

然后你可以初始化:

protected val board = (1..width).combine { x, y -> Cell(x, y) }

或者简单地说:

protected val board = (1..width).flatMap { i -> (1..width).map { j -> Cell(i, j) } }

不过,我认为前者更具可读性。

关于kotlin - 在 Kotlin 中初始化集合更惯用的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55800506/

相关文章:

ios - 适应不断变化的模型 Swift iOS?

ios - 在 Swift 中从 View Controller 传回对象

python - 查找两个不同列表中出现的唯一数字

c++ - 如何使用另一个类的静态集初始化集...?

MySQL 在列上设置类型

Kotlin:删除数组中相同的相邻成员

android - RealmResults 大小返回零

android - FragmentDirections 不是由 Safe Args 插件生成的

intellij-idea - Kotlin 'rem' 作为 'mod' 的替代品不可用?

c - 如何使用结构体成员初始化结构体?