首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能用'String.SubSequence‘(也就是'Substring')类型的参数下标类型'[String:[String]]’的值?

为什么我不能用'String.SubSequence‘(也就是'Substring')类型的参数下标类型'[String:[String]]’的值?
EN

Stack Overflow用户
提问于 2020-02-18 15:35:50
回答 2查看 396关注 0票数 1

我有一个想要转换成字典的数组,我声明了一个函数来实现它,但是每次编译时都会收到这个错误:“不能用'String.SubSequence‘(也就是’Substring‘)类型的参数下标类型'[String : String]’的值”。

我的代码是

代码语言:javascript
复制
let animals = ["Bear", "Black Swan", "Buffalo", "Camel", "Cockatoo", "Dog", "Donkey", "Emu", "Giraffe", "Greater Rhea", "Hippopotamus", "Horse", "Koala", "Lion", "Llama", "Manatus", "Meerkat", "Panda", "Peacock", "Pig", "Platypus", "Polar Bear", "Rhinoceros", "Seagull", "Tasmania Devil", "Whale", "Whale Shark", "Wombat"]
   var animalsDict = [String: [String]]()
    var animalSectionTitles = [String]()

 func createAnimalDict() {
        for animal in animals {
            let secondLetterIndex = animal.index(animal.startIndex, offsetBy: 1)
            let animalKey = animal[..<secondLetterIndex]
            if var animalValues = animalsDict[animalKey] {
                animalValues.append(animal)
                animalsDict[animalKey] = animalValues
            }else {
                animalsDict[animalKey] = [animal]
            }
        }
        animalSectionTitles = [String](animalsDict.keys)
        animalSectionTitles = animalSectionTitles.sorted(by: { $0 < $1 })
    }

我希望在转换到用这个字典填充一个表视图后得到这个字典,它的键指向节标题,它的值引用行的标题。

代码语言:javascript
复制
let animals: [String: [String]] = ["B" : ["Bear", "Black Swan", "Buffalo"],

"C" : ["Camel", "Cockatoo"],

"D" : ["Dog", "Donkey"],

"E" : ["Emu"],

"G" : ["Giraffe", "Greater Rhea"],

"H" : ["Hippopotamus", "Horse"],

"K" : ["Koala"],

"L" : ["Lion", "Llama"],

"M" : ["Manatus", "Meerkat"],

"P" : ["Panda", "Peacock", "Pig", "Platypus", "Polar Bear"],

"R" : ["Rhinoceros"],

"S" : ["Seagull"],

"T" : ["Tasmania Devil"],

"W" : ["Whale", "Whale Shark", "Wombat"]]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-18 15:45:25

你只需像这样使用init(grouping:by:) Dictionary's initializer

代码语言:javascript
复制
var animalsDict = Dictionary(grouping: animals) { String($0.first!) }

var animalSectionTitles = animalsDict.keys.sorted()

输出:

代码语言:javascript
复制
print(animalsDict) //["G": ["Giraffe", "Greater Rhea"], "P": ["Panda", "Peacock", "Pig", "Platypus", "Polar Bear"], "E": ["Emu"], "H": ["Hippopotamus", "Horse"], "K": ["Koala"], "L": ["Lion", "Llama"], "R": ["Rhinoceros"], "D": ["Dog", "Donkey"], "B": ["Bear", "Black Swan", "Buffalo"], "M": ["Manatus", "Meerkat"], "W": ["Whale", "Whale Shark", "Wombat"], "S": ["Seagull"], "T": ["Tasmania Devil"], "C": ["Camel", "Cockatoo"]]

print(animalSectionTitles) //["B", "C", "D", "E", "G", "H", "K", "L", "M", "P", "R", "S", "T", "W"]
票数 4
EN

Stack Overflow用户

发布于 2020-02-18 15:45:30

您所需要做的就是将Substring,即animalKey转换为String,您的代码就像预期的那样工作。

代码语言:javascript
复制
let animalKey = String(animal[..<secondLetterIndex])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60284473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档