字典中的随机元素

Random Elements from Dictionary

这是我的字典数组,

var myArrayOfDict =  [["vegetables": ["CARROT","BEANS"], "fruits": ["APPLE","MANGO","BANANA"], "letters":["A","B","C","D"],"numbers":["ONE","TWO","THREE"],"shapes":["SQUARE","RECTANGLE","CIRCLE"]]]

我如何获得所需的输出,实际上我需要随机选择指定范围内的元素...(即)当我需要从字典中随机选择 3 个元素时,

[["fruits": ["APPLE","MANGO","BANANA"],"shapes":["SQUARE","RECTANGLE","CIRCLE"],"numbers":["ONE","TWO","THREE"]]]

当我只需要 2 个随机元素时,

[["shapes":["SQUARE","RECTANGLE","CIRCLE"],"fruits": ["APPLE","MANGO","BANANA"]]]

提前致谢,

这是一种使用 randomElement() 的解决方案。

func randomSelection(from dict: [String: [String]], count: Int) -> [String: [String]] {    
    guard !dict.isEmpty else { return [:] }

    var result = [String: [String]]()

    for i in 0..<count {
        let element = dict.randomElement()! //We know dictionary is not empty
        result[element.key] = element.value  
    }
    return result
}

如果从 randomElemnt() 中多次 return 编辑同一元素,上述解决方案可能 return 字典中的元素少于预期。如果这应该被取消,下面的解决方案应该有效

func randomSelection(from dict: [String: [String]], count: Int) -> [String: [String]] {
    guard !dict.isEmpty else { return [:] }
    guard dict.count > count else { return dict }

    var result = [String: [String]]()

    while result.count < count {
        let element = dict.randomElement()!
        if result[element.key] == nil { 
            result[element.key] = element.value        
        }
    }
    return result
}

由于该函数将字典作为第一个参数,因此需要循环数组

for d in myArrayOfDict {
    print(randomSelection(from: d, count: 2))
}

Array myArrayOfDict 包含单个 Dictionary。因此,从中获取随机元素没有意义。

正如您的示例所解释的,您需要从 Dictionary 本身获取随机元素。

因此,您可以使用 randomElement 来实现它。

let myArrayOfDict =  ["vegetables": ["CARROT","BEANS"], "fruits": ["APPLE","MANGO","BANANA"], "letters":["A","B","C","D"],"numbers":["ONE","TWO","THREE"],"shapes":["SQUARE","RECTANGLE","CIRCLE"]]

var elements = [String : [String]]()
let count = 2
for _ in 0..<count {
    if let element = myArrayOfDict.randomElement() {
        elements[element.key] = element.value
    }
}
print(elements)