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

Swift中如何基于字典key合并相邻索引对应的字符串值?

实现方案
  • 核心逻辑是先对选中的索引做连续序列分组,所有相邻的索引会被归到同一组,直接按组拼接单词即可,不需要处理两两拼接的重复问题。

实现步骤如下:

  1. 取出所有选中的索引并升序排序
  2. 将排序后的索引切分为多个连续的子序列,每个子序列对应一组相邻的选中单词
  3. 每组取最小索引作为合并后的key,组内所有索引对应的单词按顺序拼接为value,直接生成最终的合并字典
let text = "This is a test for merging adjacent words that the user has selected."

// 拆分后的单词数组
var arrayOfString: [String] {
    text.components(separatedBy: " ")
}

// 用户选中的单词
var userSelectedWords: [Int:String] = [2 : "a", 3 : "test", 4 : "for", 6 : "adjacent", 7 : "words", 9 : "the", 11 : "has"]

// 1. 排序选中的索引
let sortedKeys = userSelectedWords.keys.sorted()

// 2. 对连续索引分组
var groups: [[Int]] = []
for key in sortedKeys {
    // 检查最后一个分组的最后一个元素是不是和当前索引连续
    if let lastGroup = groups.last, let lastKey = lastGroup.last, lastKey + 1 == key {
        groups[groups.count - 1].append(key)
    } else {
        groups.append([key])
    }
}

// 3. 生成合并后的选中字典
var mergedSelectedWords: [Int: String] = [:]
for group in groups {
    guard let firstKey = group.first else { continue }
    // 按索引顺序取出所有单词拼接
    let mergedWord = group.compactMap { userSelectedWords[$0] }.joined(separator: " ")
    mergedSelectedWords[firstKey] = mergedWord
}

// 测试输出
print(mergedSelectedWords)
// 输出结果:[2: "a test for", 6: "adjacent words", 9: "the", 11: "has"]

如果需要更新原始的userSelectedWords,直接把mergedSelectedWords赋值过去就行,也不需要额外维护要删除的索引列表,整个逻辑不依赖选中单词的数量,不管是2个还是N个连续单词都能正确合并。

内容的提问来源于stack exchange,提问作者Soundtwig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:12:03