Arrays Swift从字符串数组中创建首字母数组,无重复项

Arrays Swift从字符串数组中创建首字母数组,无重复项,arrays,swift,Arrays,Swift,我有一个字符串数组。我希望遍历数组,从每个字符串中获取第一个字母,并将其添加到另一个数组中,但前提是该字母尚未添加。我在google上找到的所有答案都非常高级,我一直在寻找一个简单的函数。我在这里假设小写和大写是等价的,所以我按顺序收集字符串的大写版本。我的字符串数组称为words,结果数组称为arr: var arr = [String]() var previous = "" for aWord in words { let c = String(aWord.characters.p

我有一个字符串数组。我希望遍历数组,从每个字符串中获取第一个字母,并将其添加到另一个数组中,但前提是该字母尚未添加。我在google上找到的所有答案都非常高级,我一直在寻找一个简单的函数。

我在这里假设小写和大写是等价的,所以我按顺序收集字符串的大写版本。我的字符串数组称为
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))
    }
}