You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何从字符串数组中提取排序后的唯一单词

Swift中如何从字符串数组中提取排序后的唯一单词

嗨,我来帮你搞定这个问题!你想要从包含句子的字符串数组里提取出排序后的唯一单词,其实把几个关键步骤组合起来就能实现,咱们一步步来:

先看完整的可运行代码

let complexArray = ["One large dog", "One small dog", "Two small cats"]

let sortedUniqueWords = complexArray
    // 1. 把每个句子拆成单词,合并成一个大数组
    .flatMap { $0.components(separatedBy: .whitespacesAndNewlines) }
    // 2. 过滤掉拆分时可能出现的空字符串(比如连续空格的情况)
    .filter { !$0.isEmpty }
    // 3. 统一转为小写,确保"One"和"one"被视为同一个单词
    .map { $0.lowercased() }
    // 4. 用Set自动去重
    .reduce(into: Set<String>()) { $0.insert($1) }
    // 5. 按字母顺序排序
    .sorted()

print(sortedUniqueWords) // 输出: ["cats", "dog", "large", "one", "small", "two"]

每个步骤的作用解释

  • flatMap + components(separatedBy:):components(separatedBy: .whitespacesAndNewlines)会把单个句子按空白字符(空格、换行等)拆成单词数组,flatMap能把所有句子拆分出来的单词数组合并成一个一维数组,避免得到嵌套的二维数组(这也是很多人用map踩坑的地方)。
  • filter空字符串:如果句子里有连续空格,拆分后会产生空字符串,这一步把它们过滤掉,避免影响结果。
  • lowercased()统一大小写:例子里的结果都是小写,这一步确保不同大小写的同一个单词被识别为重复项,比如"One"和"one"会被处理成同一个。
  • Set去重:Set的特性就是元素唯一,把单词数组转成Set就能自动去掉重复项,这里用reduce(into:)是高效的插入方式,你也可以直接用Set(处理后的单词数组)来简化。
  • sorted()排序:默认按字母升序排序,正好符合你想要的结果。

更简洁的写法

如果想让代码更紧凑,也可以把去重步骤直接用Set初始化来实现:

let complexArray = ["One large dog", "One small dog", "Two small cats"]

let sortedUniqueWords = Set(
    complexArray
        .flatMap { $0.components(separatedBy: .whitespaces).filter { !$0.isEmpty } }
        .map { $0.lowercased() }
).sorted()

print(sortedUniqueWords)

你之前尝试map、flatMap和Set没成功,大概率是没处理大小写统一,或者用了map而非flatMap导致得到二维数组,没法直接去重~

备注:内容来源于stack exchange,提问作者user1233894

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 08:48:02