Arrays 如何用自定义对象填充二维数组?敏捷的
我试着做一个有网格板和像鱼和虎鲸这样的角色的项目。我创建了Animal父类和继承Animal的两个子类。我想用5%的虎鲸和35%的鱼填充木板(n*m)。我怎样才能用虎鲸和鱼来填充网格?在这里,我试着在黑板上填上数字Arrays 如何用自定义对象填充二维数组?敏捷的,arrays,swift,oop,grid,Arrays,Swift,Oop,Grid,我试着做一个有网格板和像鱼和虎鲸这样的角色的项目。我创建了Animal父类和继承Animal的两个子类。我想用5%的虎鲸和35%的鱼填充木板(n*m)。我怎样才能用虎鲸和鱼来填充网格?在这里,我试着在黑板上填上数字 class Animal { } class Fish: Animal{ } class Orca:Animal{ } class Board{ private var content: [[Int?]] private static func setupForNewGame(w
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?]
的矩阵
数组,并使用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
}
}
声明类型为
[[Animal?]
的矩阵
数组,并使用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
}
}
要用自定义对象填充二维数组,需要注意:
0…width-1
最好在Swift中写为0..
。要用自定义对象填充二维数组,需要注意:0…width-1
最好在Swift中写为0..
。arr
没有足够的项来填充数组矩阵
因为它只有原来的40%。@vacawama是的。其他元素将为零,但当你填充矩阵时,元素是否会用尽,从而导致索引超出范围错误?现在你的生物在矩阵的开头被卡住了。在arr
中放入足够多的nil并将其洗牌如何?OP的arr
在洗牌之前有width*height
元素,所以足够用均匀分布的动物填充矩阵。arr
没有足够的项目填充矩阵,因为它只有40%大。@vacawama是的。其他元素将为零,但当你填充矩阵时,元素是否会用尽,从而导致索引超出范围错误?现在你的生物在矩阵的开头被卡住了。在arr
中放入足够的nil并将其洗牌如何?OP的arr
洗牌前有width*height
元素,因此足以用均匀分布的动物填充matrix
。