arrays - 数组上的嵌套 for 循环

标签 arrays swift sprite-kit

我正在使用 SpriteKitSwift 3 创建一个简单的游戏。 我有一组环/圆:

mRings = [mRingOne, mRingTwo, mRingThree, mRingFour, mRingFive]

数组中的每个对象都有不同的颜色,在游戏中的某些时候我想改变每个环的颜色,但我有两个条件可以实现: 1. 一枚戒指不应该有它之前迭代的颜色。 2. 每个戒指的颜色应该与其他戒指不同。

对于第一个条件,我这样做了:

func changeRingsColor(){
    var previousColor: UIColor?
    for ring in mRings {
        previousColor = ring.fillColor
        repeat{
            ring.fillColor = hexStringToUIColor(hex: mColors[Int(arc4random_uniform(UInt32(5)))])
        }while(ring.fillColor.isEqual(previousColor))
    }
}

它正在运行,但是,我想不出一种方法来回答第二个条件。 在 Java 中,我可能会这样做:

    for (int i=0; i<mRings.length; i++){
      for( int j=1; j<mRings.length; j++){
        if (ring[i].fillColor == ring[j].fillColor){
            generate another color for 'j' ring.
        }
    }
 }

但我没有尝试过。 希望你们能帮助我,在此先感谢!

顺便说一句,mColors 是 5 种不同颜色的数组,我从那里挑选颜色。

最佳答案

我将忽略一些实现细节并关注问题的核心,即:

  • 遍历一个数组
  • 在每个循环中,从当前索引开始一个新循环,直到数组末尾。

如果我对上述内容有误解,请告诉我。但我会这样做:

for (index, ring) in mRings.enumerated() {
    let remainingRings = mRings[index+1..<mRings.count]
    for otherRing in remainingRings {
        print("Now comparing \(ring) to \(otherRing)")
    }
}

首先,enumerated() 在第一个 for 循环的每次迭代中为您提供当前环和索引。然后,我们将数组从当前索引切片到末尾 (remainingRings),并循环遍历这些数组。

关于arrays - 数组上的嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41635216/

相关文章:

c - 在外部结构初始化中反射(reflect)内部结构

java - 为什么 Collections.sort() 比 Arrays.sort() 慢得多?

swift - 在Swift中获取类型的所有嵌套类型(作为元类型引用)

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

ios - 触摸时添加和删除 SKPhysicsJointPin 的混淆问题

ios - 如何在我的通用应用程序中的每台设备的角落放置一个硬币标签?

ios - 如何使用 Swift 语言将 Game Center 集成到 Xcode 6 中的 iOS 应用程序中?

java - 数组如何在 C++ 或 Java 中为 "copied"

ios - Swift:如何通过完成处理程序(闭​​包)的引用存储对象数组?

ios - 节点与子类的联系