【问题标题】:Creating array from random dictionary key values从随机字典键值创建数组
【发布时间】:2021-08-06 02:30:11
【问题描述】:

我想创建一个返回字符串数组的函数,函数参数是数组大小。 数组值是字典键中的随机字符串。我做了这段代码

import UIKit

var cards: [String:Int] = [

"crvenaSedmica":0,
"crvenaOsmica":0,
"crvenaDevetka":0,
"crvenaDesetka":0,
"crvenaDecko":0,
"crvenaDama":0,
"crvenaKralj":0,
"crvenaAs":0,
"bundevaSedmica":0,
"bundevaOsmica":0,
"bundevaDevetka":0,
"bundevaDesetka":0,
"bundevaDecko":0,
"bundevaDama":0,
"bundevaKralj":0,
"bundevaAs":0,
"zelenaSedmica":0,
"zelenaOsmica":0,
"zelenaDevetka":0,
"zelenaDesetka":0,
"zelenaDecko":0,
"zelenaDama":0,
"zelenaKralj":0,
"zelenaAs":0,
"zirSedmica":0,
"zirOsmica":0,
"zirDevetka":0,
"zirDesetka":0,
"zirDecko":0,
"zirDama":0,
"zirKralj":0,
"zirAs":0,
]

func createRandomCards(number:Int) -> [String] {
    let cardTypes = Array(cards.keys) 
    var randomCards: [String] = []

    for i in 0..<number {  
        randomCards[i] = cardTypes[Int.random(in: 0..<32)]    
    }
    return randomCards
}

createRandomCards(number: 5)

但我得到了:

执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0 错误。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    真正的错误其实是:

    Swift/ContiguousArrayBuffer.swift:593:致命错误:索引超出范围 2021-05-16 09:59:14.866263-0700 YOURAPPNAME[2540:97613] Swift/ContiguousArrayBuffer.swift:593:致命错误:索引超出范围

    问题是您正在通过索引访问randomCards,但该元素还不存在。

    var randomCards: [String] = []
    ...
    randomCards[i] = cardTypes[Int.random(in: 0..<32)]
                ^ right here!
    

    这里,randomCards 仍然是空的。 randomCards[0]randomCards[1]randomCards[2] 等都不起作用。

    相反,您想append。通过索引访问仅适用于您想要修改 现有 元素时。

    randomCards.append(cardTypes[Int.random(in: 0..<32)])
    

    你也扔掉了函数的返回值。而不是...

    createRandomCards(number: 5)
    

    ...你应该将它分配给一个常量。

    let cards = createRandomCards(number: 5)
    

    【讨论】:

      【解决方案2】:

      不要使用那个 for 循环。它已被抽象为map 方法。如您所见,自己编写很容易出错。

      另外,不要对键的计数进行硬编码。

      func createRandomCards(number: Int) -> [String] {
        AnyIterator { }
          .prefix(number)
          .map { cards.keys.randomElement()! }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 2014-03-22
        • 2010-11-06
        • 2017-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多