【问题标题】:Printing Random values in swift快速打印随机值
【发布时间】:2015-02-13 18:38:35
【问题描述】:

所以我在 swift 中尝试了一些 WatchKit 的想法,并决定制作一个随机纸牌生成器。附图显示了我的代码和运行“shuffle”函数时得到的输出。请注意输出如何将 2 个值放在一起,从看似无处添加随机数值,它甚至还显示了 12 黑桃选项,即使值数组中没有“12”条目。

我是编程新手,我这样做只是为了尝试一些想法并快速掌握 Swift。那么谁能帮我理解为什么会发生这种情况以及如何预防呢?

非常感谢各位。

【问题讨论】:

  • 如果您以文本格式而不是屏幕截图的形式发布代码会非常有帮助 - 图片可以提供帮助,但不能在编辑器中复制和粘贴它们:)
  • Eoin,当您说“它甚至还显示了黑桃 12 选项”时...在您的屏幕截图中,我在控制台中没有看到 12。你能再解释一下吗?
  • 是的,在这种特殊情况下它没有显示出来。但它每次随机生成 52 个不同的输出,因为这是该方法的目的。在运行该方法的这个实例中,它没有显示黑桃 12,但它以前显示。
  • 请发布您的代码以便我们为您提供帮助。截图很难用

标签: ios iphone swift ios8


【解决方案1】:

您可以考虑先创建套牌,然后再洗牌。比如:

var deck = [String]()
for value in values {
    for suite in suites {
        deck.append(value+suite)
    }
 }

var shuffledDeck = [String]()
for i in 0..<52 {
    let seed = UInt32(deck.count - 1)
    let randomCardIndex = Int(arc4random_uniform(seed))
    shuffledDeck.append(deck.removeAtIndex(randomCardIndex))
}

【讨论】:

    【解决方案2】:

    以@Jeremy Pope 的回答和我的old answers 之一为基础,这里是一个展示如何随机播放 52 个对象的游乐场。

    import Foundation
    
    extension Array
    {
        func shuffled() -> Array
        {
            var result:Array = []
    
            result.append( self[0] )
    
            for index in 0..<self.count
            {
                let j = Int( arc4random_uniform( UInt32( index ) ) )
                result.append( result[ j ] )
                result[ j ] = self[ index ]
            }
    
            return result ;
        }
    }
    
    let suits = ["♠️", "♥️", "♣️", "♦️"]
    let ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
    var stringArray = Array(0...51).map { number in
        "\(suits[number / 13])\(ranks[number % 13])"
    }
    stringArray = stringArray.shuffled()
    

    结果:

    [♥️8,♣️7,♠️4,♦️J,♦️10,♦️7,♠️A,♠️9,♥️A,♥️7,♦️4,♠️8,♠️A, ♦️A,♠️2,♠️3,♣️6,♣️2,♣️A,♥️5,♥️K,♣️10,♦️3,♥️3,♥️2,♠️6,♣️J, ♠️10,♥️9,♦️5,♠️5,♠️7,♦️9,♣️4,♣️Q,♣️8,♠️K,♦️6,♥️J,♣️5,♠️J, ♣️9,♦️8,♥️4,♥️10,♥️Q,♦️2,♦️Q,♦️K,♣️3,♥️6,♠️Q,♣️K]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2017-06-09
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 2013-05-12
      • 2017-09-08
      相关资源
      最近更新 更多