【问题标题】:How to get first letter of all strings in an array in iOS Swift?如何在 iOS Swift 中获取数组中所有字符串的首字母?
【发布时间】:2015-11-19 00:10:05
【问题描述】:

我有一组字符串存储在一个数组中。

stringArray = [Aruna, Bala, Chitra, Divya, Fatima]

我想获取所有字符串的第一个字母并将其存储在一个数组中。 点赞:letterArray = [A, B, C, D, F]

注意:它们不在引号“--”内

【问题讨论】:

    标签: ios swift nsarray


    【解决方案1】:

    不确定“它们不在引号内”是什么意思,但如果它们实际上是字符串,则如下所示:

    var letterArray = [Character]()
    for string in stringArray {
        letterArray.append(string.characters.first!)
    }
    

    编辑

    如你所愿,改为String

    var letterArray = [String]()
    for string in stringArray {
        letterArray.append(String(string.characters.first!))
    }
    

    编辑 2

    正如Leo Dabus 建议的那样,如果您传递一个空字符串,上述操作将失败。如果你知道永远不会有一个空字符串,这不适用,但我已经更新了上面的内容来处理这种情况:

    var letterArray = [String]()
    for string in stringArray {
        if let letter = string.characters.first {
            letterArray.append(String(letter))
        }
    }
    

    更新:SWIFT 4

    从 Swift 4 开始,characters 已被弃用。您现在应该只使用string.first 直接对字符串进行操作,而不是使用string.characters.first。例如:

    var letterArray = [String]()
    for string in stringArray {
        if let letter = string.first {
            letterArray.append(String(letter))
        }
    }
    

    【讨论】:

    • 我想要 letterAray[String] 而不是 [Character] 可能吗?
    • 但它们不是字符串,它们只是字符。您有什么用例,其中一个字符与一个包含一个字母的字符串如此重要?
    • 将其更新为存储为字符串。
    • @AAA 请注意,如果您传递一个包含空字符串的数组,像这样强制展开会使您的应用程序崩溃
    • 已更新以处理这种情况,因为我更喜欢自己的解决方案的可读性。
    【解决方案2】:

    Xcode 9 • Swift 4

    extension Collection where Element: StringProtocol {
        var initials: [Element.SubSequence] {
            return map { $0.prefix(1) }
        }
    }
    

    Xcode 8 • Swift 3

    extension Collection where Iterator.Element == String {
        var initials: [String] {
            return map{String($0.characters.prefix(1))}
        }
    }
    

    Xcode 7.3.1 • Swift 2.2.1

    extension CollectionType where Generator.Element == String {
        var initials: [String] {
            return map{ String($0.characters.prefix(1)) }
        }
    }
    
    
    let stringArray = ["Aruna", "Bala", "Chitra", "Divya", "Fatima"]
    
    let initials = stringArray.initials  // ["A", "B", "C", "D", "F"]
    

    【讨论】:

    • 很好的答案,我们可以在扩展中制作唯一首字母的数组,即不重复吗?
    • @CunchalRaj stackoverflow.com/a/39324354/2303865 只需将 .orderedSet 添加到 stringArray.initials.orderedSet
    【解决方案3】:

    或许你应该试试我的解决方案。

    let stringArray = ["Aruna", "Bala", "Chitra", "Divya", "Fatima"]
    
    let result = stringArray.map({ $0.prefix(1) }) // ["A", "B", "C", "D", "F"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      • 2017-04-28
      相关资源
      最近更新 更多