Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何用自定义对象填充二维数组?敏捷的_Arrays_Swift_Oop_Grid - Fatal编程技术网

Arrays 如何用自定义对象填充二维数组?敏捷的

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

我试着做一个有网格板和像鱼和虎鲸这样的角色的项目。我创建了Animal父类和继承Animal的两个子类。我想用5%的虎鲸和35%的鱼填充木板(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?]
矩阵
数组,并使用
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