Arrays 如何从阵列中随机筛选和选择CGPoint

Arrays 如何从阵列中随机筛选和选择CGPoint,arrays,swift,sorting,filter,swift2,Arrays,Swift,Sorting,Filter,Swift2,我有许多CGPoints数组,如下面的方法所示。我正在尝试为我的精灵筛选一个位置,该位置按上述顺序循环地向下、向左、向上和向右移动。如何从阵列组(向下、向左等)中随机选择一个阵列,然后从所选阵列中随机选择一个点,同时注意阵列组,以便在再次调用该方法时,将使用以下组进行生成(按照循环顺序)。例如,由于down是循环中的第一个,因此随机选择“down数组”,如果选择down2,则应从down2中随机选择一个点,例如p5。下次调用此方法时,应对“左数组”执行相同的过程,依此类推。这似乎相当复杂 fun

我有许多CGPoints数组,如下面的方法所示。我正在尝试为我的精灵筛选一个位置,该位置按上述顺序循环地向下、向左、向上和向右移动。如何从阵列组(向下、向左等)中随机选择一个阵列,然后从所选阵列中随机选择一个点,同时注意阵列组,以便在再次调用该方法时,将使用以下组进行生成(按照循环顺序)。例如,由于down是循环中的第一个,因此随机选择“down数组”,如果选择down2,则应从down2中随机选择一个点,例如p5。下次调用此方法时,应对“左数组”执行相同的过程,依此类推。这似乎相当复杂

func nextPosition ()->CGPoint   {
        let down1 = [p1, p2]
        let down2 = [p3, p4, p5]
        let left1 = [p6, p7]
        let left2 = [p8, p9, p10]
        let left3 = [p11, p12, p13]
        let up1 = [p14, p15]
        let up2 = [p16, p17]
        let up3 = [p18, p19]
        let right1 = [p20, p21]
        let right2 = [p22, p23]
        let right3 = [p24, p25]
        let right4 = [p26, p27, p28, p29, p30]

        //return point    
  }
这应该起作用:

func nextPosition () -> CGPoint   {

    var pointsArray:[[CGPoint]] = [[]]

    let down1 = [p1, p2]
    pointsArray.append(down1)
    let down2 = [p3, p4, p5]
    pointsArray.append(down2)

    let left1 = [p6, p7]
    pointsArray.append(left1)
    let left2 = [p8, p9, p10]
    pointsArray.append(left2)
    let left3 = [p11, p12, p13]
    pointsArray.append(left3)

    let up1 = [p14, p15]
    pointsArray.append(up1)
    let up2 = [p16, p17]
    pointsArray.append(up2)
    let up3 = [p18, p19]
    pointsArray.append(up3)

    let right1 = [p20, p21]
    pointsArray.append(right1)
    let right2 = [p22, p23]
    pointsArray.append(right2)
    let right3 = [p24, p25]
    pointsArray.append(right3)
    let right4 = [p26, p27, p28, p29, p30]
    pointsArray.append(right4)


    let randomDirection: Int = Int(arc4random_uniform(UInt32(pointsArray.count)))
    let randomPoint: Int = Int(arc4random_uniform(UInt32(pointsArray[randomDirection].count)))

    return pointsArray[randomDirection][randomPoint]

}
我所做的基本上是创建一个二维阵列。第一个维度表示方向,第二个维度表示该方向上的点。

这应该可以:

func nextPosition () -> CGPoint   {

    var pointsArray:[[CGPoint]] = [[]]

    let down1 = [p1, p2]
    pointsArray.append(down1)
    let down2 = [p3, p4, p5]
    pointsArray.append(down2)

    let left1 = [p6, p7]
    pointsArray.append(left1)
    let left2 = [p8, p9, p10]
    pointsArray.append(left2)
    let left3 = [p11, p12, p13]
    pointsArray.append(left3)

    let up1 = [p14, p15]
    pointsArray.append(up1)
    let up2 = [p16, p17]
    pointsArray.append(up2)
    let up3 = [p18, p19]
    pointsArray.append(up3)

    let right1 = [p20, p21]
    pointsArray.append(right1)
    let right2 = [p22, p23]
    pointsArray.append(right2)
    let right3 = [p24, p25]
    pointsArray.append(right3)
    let right4 = [p26, p27, p28, p29, p30]
    pointsArray.append(right4)


    let randomDirection: Int = Int(arc4random_uniform(UInt32(pointsArray.count)))
    let randomPoint: Int = Int(arc4random_uniform(UInt32(pointsArray[randomDirection].count)))

    return pointsArray[randomDirection][randomPoint]

}

我所做的基本上是创建一个二维阵列。第一个维度表示方向,第二个维度表示该方向上的点。

试试这个。函数返回是一个由4个CG点组成的数组-接下来的四个点,每个方向一个,即第一个是下降点,下一个是左侧点等。函数返回的示例可以是
[p3,p7,p19,p25]

func nextPosition() -> [CGPoint] {

    // Make a separate array for each group of points in each direction
    let down1 = [p1, p2]
    let down2 = [p3, p4, p5]
    let left1 = [p6, p7]
    let left2 = [p8, p9, p10]
    let left3 = [p11, p12, p13]
    let up1 = [p14, p15]
    let up2 = [p16, p17]
    let up3 = [p18, p19]
    let right1 = [p20, p21]
    let right2 = [p22, p23]
    let right3 = [p24, p25]
    let right4 = [p26, p27, p28, p29, p30]

    // Make separate arrays for each direction which contains the previous arrays
    let dArray = [down1, down2]
    let lArray = [left1, left2, left3]
    let uArray = [up1, up2, up3]
    let rArray = [right1, right2, right3, right4]

    // Make an array to group all the directions
    let array = [dArray, lArray, uArray, rArray]

    var nextPositions = [CGPoint]()

    // loop through dArray, lArray etc.
    for arr in array {
        // pick random direction array
        var length = UInt32(arr.count)
        let random = Int(arc4random_uniform(length))

        // pick random point from sub array
        length =  UInt32(arr[random].count)
        let random2 = Int(arc4random_uniform(length))

        // print final random point
        print(arr[random][random2])
        nextPositions.append(arr[random][random2])
    }
    return nextPositions
}

试试这个。函数返回是一个由4个CG点组成的数组-接下来的四个点,每个方向一个,即第一个是下降点,下一个是左侧点等。函数返回的示例可以是
[p3,p7,p19,p25]

func nextPosition() -> [CGPoint] {

    // Make a separate array for each group of points in each direction
    let down1 = [p1, p2]
    let down2 = [p3, p4, p5]
    let left1 = [p6, p7]
    let left2 = [p8, p9, p10]
    let left3 = [p11, p12, p13]
    let up1 = [p14, p15]
    let up2 = [p16, p17]
    let up3 = [p18, p19]
    let right1 = [p20, p21]
    let right2 = [p22, p23]
    let right3 = [p24, p25]
    let right4 = [p26, p27, p28, p29, p30]

    // Make separate arrays for each direction which contains the previous arrays
    let dArray = [down1, down2]
    let lArray = [left1, left2, left3]
    let uArray = [up1, up2, up3]
    let rArray = [right1, right2, right3, right4]

    // Make an array to group all the directions
    let array = [dArray, lArray, uArray, rArray]

    var nextPositions = [CGPoint]()

    // loop through dArray, lArray etc.
    for arr in array {
        // pick random direction array
        var length = UInt32(arr.count)
        let random = Int(arc4random_uniform(length))

        // pick random point from sub array
        length =  UInt32(arr[random].count)
        let random2 = Int(arc4random_uniform(length))

        // print final random point
        print(arr[random][random2])
        nextPositions.append(arr[random][random2])
    }
    return nextPositions
}

追加的第一个数组应该是
up1
而不是
up11
。可能会建议编辑,但它只有一个字符。是的,对不起,打字错误,我修复了它。这个函数也适用于从每个点中选择一个随机变量,但不会按顺序返回4个不同的点(一个从下、左、上和右)。也许我不太理解这个问题。但由此看来,选择4个不同的点并返回一个数组并不成问题。首先追加数组的应该是
up1
而不是
up11
。可能会建议编辑,但它只有一个字符。是的,对不起,打字错误,我修复了它。这个函数也适用于从每个点中选择一个随机变量,但不会按顺序返回4个不同的点(一个从下、左、上和右)。也许我不太理解这个问题。但是从这一点来看,选择4个不同的点并返回一个数组并不成问题。