Arrays Swift从字符串数组中创建首字母数组,无重复项
我有一个字符串数组。我希望遍历数组,从每个字符串中获取第一个字母,并将其添加到另一个数组中,但前提是该字母尚未添加。我在google上找到的所有答案都非常高级,我一直在寻找一个简单的函数。我在这里假设小写和大写是等价的,所以我按顺序收集字符串的大写版本。我的字符串数组称为Arrays Swift从字符串数组中创建首字母数组,无重复项,arrays,swift,Arrays,Swift,我有一个字符串数组。我希望遍历数组,从每个字符串中获取第一个字母,并将其添加到另一个数组中,但前提是该字母尚未添加。我在google上找到的所有答案都非常高级,我一直在寻找一个简单的函数。我在这里假设小写和大写是等价的,所以我按顺序收集字符串的大写版本。我的字符串数组称为words,结果数组称为arr: var arr = [String]() var previous = "" for aWord in words { let c = String(aWord.characters.p
words
,结果数组称为arr
:
var arr = [String]()
var previous = ""
for aWord in words {
let c = String(aWord.characters.prefix(1)).uppercaseString
if c != previous {
previous = c
arr.append(c)
}
}
一行,假定
[String]
在数组中
let set = Set(array.map({String($0.prefix(1)).uppercased()}).sorted())
或
或者使用
字典(分组:按:)
这里还有一个检查重复项的替代方法
var strings: [String] = ["apple", "acorn", "tomato", "grass", "potato", "pear"]
var results: [String] = []
for string in strings {
guard let letter = string.lowercaseString.characters.first else { break }
let exists = results.filter { $0.lowercaseString.characters.first == letter }.first != nil
if !exists {
results.append(String(letter))
}
}
字符串数组是否按字母顺序排列?或者,换一种说法,生成的数组应该是什么顺序?您能提供示例输入/所需输出吗?是的,我使用testArr.sortInPlace{$0<$1}将字符串按字母顺序重新组织..如果我有a,be,bad,cow..它将放入新数组a,b,cAnd中,如何消除重复哦,我明白了,因为我们把它压缩成一组。但现在我们没有秩序了。如果他真的想要一个数组怎么办?结果是一个
Set
你可以使用flatMap
,这样你就不必先隐式地打开,
。谢谢你的明确回答。小的挑剔:c
在与上一个首字母进行比较之前应该先转换成大写,否则[“Aardvarks”,“are”,“sorry”]
将导致[“A”,“A”]
.Thx@MartinR-将其向前移动
let result = Dictionary(grouping: array, by: {String($0.prefix(1)).uppercased()}).keys.sorted()
var strings: [String] = ["apple", "acorn", "tomato", "grass", "potato", "pear"]
var results: [String] = []
for string in strings {
guard let letter = string.lowercaseString.characters.first else { break }
let exists = results.filter { $0.lowercaseString.characters.first == letter }.first != nil
if !exists {
results.append(String(letter))
}
}