在Swift中为... in循环编写多个嵌套

问题描述 投票:2回答:2

是否有一个更整洁或更好的方法来编写以下嵌套在Swift中的... in循环?或者正在使用...甚至以正确的方式填充我的卡片?

for cardNumber in 1...3 {
    for cardSymbolIdentifier in 1...3 {
        for cardColorIdentifier in 1...3 {
            for cardShadingIdentifier in 1...3 {
                let card = Card(cardNumber: cardNumber, cardSymbolIdentifier: cardSymbolIdentifier, cardColorIdentifier: cardColorIdentifier, cardShadingIdentifier: cardShadingIdentifier)
                deckOfCards.append(card)
            }
        }
    }
}

它确实完成了这项工作,但我在文档中找不到有关编写多个嵌套循环的内容。

非常感谢Andy

swift for-in-loop
2个回答
2
投票

你的for循环绝对没有问题。他们是优秀的,写得很好的斯威夫特。您的代码唯一的问题是它强制deckOfCards是可变的(var),这可能是不可取的。如果是,你可以使用map,但我不认为这特别好的Swift,只是略有不同。

let d = (1...3).flatMap { number in
    (1...3).flatMap { symbol in
        (1...3).flatMap { color in
            (1...3).map { shading in
                Card.init(cardNumber: number,
                          cardSymbolIdentifier: symbol,
                          cardColorIdentifier: color,
                          cardShadingIdentifier: shading
                )}}}}

我可能会以第二种方式编写它,但仅出于文体原因。你的for循环绝对没问题。


注意@ user28434的评论如下。我的original version有一个主要的错误(它返回错误的类型)。从发布之日起我就一直在编写Swift。我教斯威夫特。我在Swift中教授函数式编程。我在飞行中写它时搞砸了。我永远不会用一个简单的for循环来犯这个错误。那里有一个重要的教训。


0
投票

根据需要,您的代码根本没有优化问题,但您可以使它更优雅或更优雅(:p)

let values = [1,2,3]

values.forEach { (cardNumber) in
    values.forEach { (cardSymbolIdentifier) in
        values.forEach { (cardColorIdentifier) in
            values.forEach { (cardShadingIdentifier) in

                let card = Card(cardNumber: cardNumber, cardSymbolIdentifier: cardSymbolIdentifier, cardColorIdentifier: cardColorIdentifier, cardShadingIdentifier: cardShadingIdentifier)
                deckOfCards.append(card)
            }
        }
    }
}   
© www.soinside.com 2019 - 2024. All rights reserved.