К сожалению, нет конструктора или функции верхнего уровня, которая бы облегчала создание набора по определенной логике, но если у вас уже есть список, вы можете превратить его в Set
, используя toSet()
.
В любом случае я бы отделил логику создания списка комбинаций и создания Cell
экземпляров.
// extension property on IntRange to create all possible combinations
val IntRange.combinations get() = flatMap { i -> map { j -> i to j }}
val set = (1..5)
.combinations
.map { (i, j) -> Cell(i, j) }
.toSet()
Добавление:
Если вы создаете вторичный конструктор для Cell
, который принимает Pair
, например:
data class Cell(val i: Int, val j: Int) {
constructor(pair: Pair<Int, Int>): this(pair.first, pair.second)
}
, вы можете сократить код до этого:
val set = (1..5).combinations.map(::Cell).toSet()