这是个问题。有两本钥匙相同的字典。我需要把它们连接起来,从每个字典中随机得到一半的值。
提前谢谢你的回答。
var hiraganaDictionary1 = [
"a":"あ", "i":"い", "u":"う", "e":"え", "o":"お",
"A":"あ", "I":"い", "U":"う", "E":"え", "O":"お",
"ka":"か", "ki":"き", "ku":"く", "ke":"け", "ko":"こ",
"Ka":"か", "Ki":"き", "Ku":"く", "Ke":"け", "Ko":"こ",
"sa":"さ", "shi":"し", "su":"す", "se":"せ", "so":"そ",
"Sa":"さ", "Shi":"し", "Su":"す", "Se":"せ", "So":"そ",
"ta":"た", "chi":"ち", "tsu":"つ", "te":"て", "to":"と",
"Ta":"た", "Chi":"ち", "Tsu":"つ", "Te":"て", "To":"と",
"na":"な", "ni":"に", "nu":"ぬ", "ne":"ね", "no":"の",
"Na":"な", "Ni":"に", "Nu":"ぬ", "Ne":"ね", "No":"の"]
var katakanaDictionary1 = [
"a":"ア", "i":"イ", "u":"ウ", "e":"エ", "o":"オ",
"A":"ア", "I":"イ", "U":"ウ", "E":"エ", "O":"オ",
"ka":"カ", "ki":"キ", "ku":"ク", "ke":"ケ", "ko":"コ",
"Ka":"カ", "Ki":"キ", "Ku":"ク", "Ke":"ケ", "Ko":"コ",
"sa":"サ", "shi":"シ", "su":"ス", "se":"セ", "so":"ソ",
"Sa":"サ", "Shi":"シ", "Su":"ス", "Se":"セ", "So":"ソ",
"ta":"ソ", "chi":"チ", "tsu":"ツ", "te":"テ", "to":"ト",
"Ta":"ソ", "Chi":"チ", "Tsu":"ツ", "Te":"テ", "To":"ト",
"na":"ナ", "ni":"ニ", "nu":"ヌ", "ne":"ネ", "no":"ノ",
"Na":"ナ", "Ni":"ニ", "Nu":"ヌ", "Ne":"ネ", "No":"ノ" ]发布于 2019-03-12 12:49:44
merging(_:uniquingKeysWith:)接受一个决定如何处理冲突的函数。您可以使用该函数在字典中任意选择。
let merged = hiraganaDictionary1.merging(katakanaDictionary1,
uniquingKeysWith: { first, second in
Bool.random() ? first : second })发布于 2019-03-12 12:52:12
let hiraganaDictionary1 = [
"a":"あ", "i":"い", "u":"う", "e":"え", "o":"お",
"A":"あ", "I":"い", "U":"う", "E":"え", "O":"お",
"ka":"か", "ki":"き", "ku":"く", "ke":"け", "ko":"こ",
"Ka":"か", "Ki":"き", "Ku":"く", "Ke":"け", "Ko":"こ",
"sa":"さ", "shi":"し", "su":"す", "se":"せ", "so":"そ",
"Sa":"さ", "Shi":"し", "Su":"す", "Se":"せ", "So":"そ",
"ta":"た", "chi":"ち", "tsu":"つ", "te":"て", "to":"と",
"Ta":"た", "Chi":"ち", "Tsu":"つ", "Te":"て", "To":"と",
"na":"な", "ni":"に", "nu":"ぬ", "ne":"ね", "no":"の",
"Na":"な", "Ni":"に", "Nu":"ぬ", "Ne":"ね", "No":"の"]
let katakanaDictionary1 = [
"a":"ア", "i":"イ", "u":"ウ", "e":"エ", "o":"オ",
"A":"ア", "I":"イ", "U":"ウ", "E":"エ", "O":"オ",
"ka":"カ", "ki":"キ", "ku":"ク", "ke":"ケ", "ko":"コ",
"Ka":"カ", "Ki":"キ", "Ku":"ク", "Ke":"ケ", "Ko":"コ",
"sa":"サ", "shi":"シ", "su":"ス", "se":"セ", "so":"ソ",
"Sa":"サ", "Shi":"シ", "Su":"ス", "Se":"セ", "So":"ソ",
"ta":"ソ", "chi":"チ", "tsu":"ツ", "te":"テ", "to":"ト",
"Ta":"ソ", "Chi":"チ", "Tsu":"ツ", "Te":"テ", "To":"ト",
"na":"ナ", "ni":"ニ", "nu":"ヌ", "ne":"ネ", "no":"ノ",
"Na":"ナ", "Ni":"ニ", "Nu":"ヌ", "Ne":"ネ", "No":"ノ" ]
var mixed = hiraganaDictionary1
for (key, _) in hiraganaDictionary1 {
if Bool.random() {
if let value = katakanaDictionary1[key] {
mixed[key] = value
}
}
}发布于 2019-03-12 12:59:05
由于您希望为每个现有键设置一个值,所以可以使用Bool.random来确定从哪个字典中选择vale
var combined = [String:String]()
hiraganaDictionary1.keys.makeIterator().forEach {
combined[$0] = Bool.random() ? hiraganaDictionary1[$0] : katakanaDictionary1 [$0]
}这里有一种替代方法,每一秒都使用Bool.random(),而其他回合则使用与上次调用Bool.random()相反的方法,这将从每个字典中获得50%
var combined = [String:String]()
var flag = true
var randomFlag: Bool
hiraganaDictionary1.keys.makeIterator().forEach {
if (!flag) {
combined[$0] = !randomFlag ? hiraganaDictionary1[$0] : katakanaDictionary1 [$0]
} else {
randomFlag = Bool.random()
combined[$0] = randomFlag ? hiraganaDictionary1[$0] : katakanaDictionary1 [$0]
}
flag = !flag
}https://stackoverflow.com/questions/55121456
复制相似问题