我有一个String
阵列:斯威夫特函数式编程
let animals = ["Cat", "Chicken", "Fish", "Dog", "Mouse", "Pig", "Monkey"]
我想要得到的结果是这样的:
[(C, ["Cat", "Chicken"]),
(D, ["Dog"]),
(F, ["Fish"]),
(M, ["Mouse", "Monkey"]),
(P, ["Pig"])]
我曾尝试:
let animals = ["Cat", "Chicken", "Fish", "Dog", "Mouse", "Pig", "Monkey"]
typealias Entry = (Character, [String])
func buildIndex(words: [String]) -> [Entry] {
let distinctLetters = Array(Set(words.map { Character($0.substringToIndex($0.startIndex.advancedBy(1))) })).sort()
return distinctLetters.map({ (letter) -> Entry in
return (letter, words.filter({ (word) -> Bool in
Character(word.substringToIndex(word.startIndex.advancedBy(1))) == letter
}))
})
}
print(buildIndex(animals))
//[("C", ["Cat", "Chicken"]), ("D", ["Dog"]), ("F", ["Fish"]), ("M", ["Mouse", "Monkey"]), ("P", ["Pig"])]
现在我想与$
语法一起使用。
我曾尝试:
func buildIndex(words: [String]) -> [Entry] {
let distinctLetters = Array(Set(words.map { Character($0.substringToIndex($0.startIndex.advancedBy(1))) })).sort()
return distinctLetters.map{ ($0, words.filter {
Character($0.substringToIndex($0.startIndex.advancedBy(1))) == $0 // I want to get $0 from the map, not from the filter
})}
}
但它说:
重载 '==' 这些部分匹配参数 列表存在:(人品,人品) ,(String,String) Character($ 0.substringToIndex($ 0.startIndex.advancedBy(1)))== $ 0
我也曾尝试:
func buildIndex(words: [String]) -> [Entry] {
let distinctLetters = Array(Set(words.map { Character($0.substringToIndex($0.startIndex.advancedBy(1))) })).sort()
return distinctLetters.map { ($0, words.filter { distinctLetters.contains(Character($0.substringToIndex($0.startIndex.advancedBy(1)))) })}
}
,但它不能很好地工作。它打印:
[("C", ["Cat", "Chicken", "Fish", "Dog", "Mouse", "Pig", "Monkey"]), ("D", ["Cat", "Chicken", "Fish", "Dog", "Mouse", "Pig", "Monkey"]), ("F", ["Cat", "Chicken", "Fish", "Dog", "Mouse", "Pig", "Monkey"]), ("M", ["Cat", "Chicken", "Fish", "Dog", "Mouse", "Pig", "Monkey"]), ("P", ["Cat", "Chicken", "Fish", "Dog", "Mouse", "Pig", "Monkey"])]
那么如何实现这与$
systax。
任何帮助,将不胜感激。谢谢。
你在不同'$ 0'之间有冲突。只要保持你的参数命名,它使它们更具可读性。通过用'$ 0'代替名字,你只用你的代码做了一件事 - 你正在降低可读性。你没有使代码或多或少的功能。 – Sulthan
'buildIndex'的第二次尝试看起来像有一些复制/粘贴错误。 –
因为编译器不知道'map'中的'$ 0'。当我输入'$ 0'时,编译器提示2 $ 0,一个是'String',另一个是'Character'。当然,我选择了“Character”,但它没有奏效。 – Khuong