簡體   English   中英

從隨機字典鍵值創建數組

[英]Creating array from random dictionary key values

我想做一個返回字符串數組的 function 和 function 參數是數組大小。 數組值是字典鍵中的隨機字符串。 我做了這個代碼

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 error。

真正的錯誤實際上是:

Swift/ContiguousArrayBuffer.swift:593: Fatal error: Index out of range 2021-05-16 09:59:14.866263-0700 YOURAPPNAME[2540:97613] Swift/ContiguousArrayBuffer.swift:593: Fatal error: Index out of range

問題是您正在按索引訪問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)

不要使用那個 for 循環。 它已被抽象為map方法。 如您所見,自己編寫很容易出錯。

此外,不要對鍵的計數進行硬編碼。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM