gpt4 book ai didi

arrays - 如何用自定义对象填充二维数组? swift

转载 作者:行者123 更新时间:2023-11-28 11:30:49 25 4
gpt4 key购买 nike

我试图在我有网格板和像 Fish 和 Orca 这样的角色的地方制作项目。我创建了 Animal 父类和两个继承动物的子类。我想用 5% Orca 和 35% Fish 填充板 (n * m)。我怎样才能用逆戟鲸和鱼填满网格?在这里,我尝试用数字填充黑板。

class Animal {


}
class Fish: Animal{
}
class Orca:Animal{
}
class Board{
private var content: [[Int?]]
private static func setupForNewGame(width: Int,height: Int)->[[Int]]{

var matrix:[[Int]] = Array(repeating: Array(repeating: 0, count: width), count: height)
let cellCount = width * height

var penguinCount = Double(round(Double(cellCount) * 50.0 / 100.0))
var grampusCount = Double(round(Double(cellCount) * 5.0 / 100.0))

var arr:[Int] = Array(repeating: 0, count: cellCount)
for i in 0...cellCount - 1{
if (penguinCount > 0){
arr[i] = 1
penguinCount = penguinCount - 1
}else if (grampusCount > 0){
arr[i] = 2
grampusCount = grampusCount - 1
}else{
arr[i] = 0
}
}
let shuffledArr = arr.shuffled()
var counter = 0
for i in 0...width - 1{
for j in 0...height - 1{
matrix[i][j] = shuffledArr[counter]
counter = counter + 1
}

}

return matrix

}
}

最佳答案

声明 [[Animal?]] 类型的 matrix 数组并使用 nil 而不是 0

class Board {
private var content: [[Animal?]] = []
private static func setupForNewGame(width: Int,height: Int)->[[Animal?]] {

var matrix:[[Animal?]] = Array(repeating: Array(repeating: nil, count: width), count: height)
let cellCount = Double(width * height)

let fishCount = Int(cellCount * 35.0 / 100.0)
let orcaCount = Int(cellCount * 5.0 / 100.0)

var arr:[Animal?] = Array(1...fishCount).map { _ in Fish() } + Array(1...orcaCount).map { _ in Orca() } + Array(repeating: nil, count: Int(cellCount)-fishCount-orcaCount)
arr = arr.shuffled()

var counter = 0
for i in 0...width - 1{
for j in 0...height - 1{
matrix[i][j] = arr[counter]
counter = counter + 1
}
}
return matrix
}
}

关于arrays - 如何用自定义对象填充二维数组? swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56768298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com