首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将两个循环合并为一个

将两个循环合并为一个
EN

Stack Overflow用户
提问于 2016-03-22 22:54:05
回答 2查看 327关注 0票数 0

此代码用于将字符串数组按首字母分组。

代码语言:javascript
复制
//plain array
var list = ["apple", "apricot", "banana", "blackberry"]

//dictionary of arrays
var dict = Dictionary<String, Array<String>>()

//create necessary keys from first characters
for word in list {
    dict[ String( word.characters.prefix(1) ) ] = [ ]
}

//add words to the key of their first character
for word in list {
    dict[ String( word.characters.prefix(1) ) ]?.append( word )
}

//output dictionary
print(dict)

此示例将输出如下字典:

代码语言:javascript
复制
[ "b": ["ba", "bb"],
  "a": ["aa", "ab"] ]

代码有两个类似的for循环。它们能被合并成一个影响输出的单一循环吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-22 23:02:32

听起来像是groupBy函数的完美工作:

代码语言:javascript
复制
extension Array {
    func groupBy<T: Hashable>(f: Element -> T) -> [T: [Element]] {
        var results = [T: [Element]]()
        for element in self {
            let key = f(element)
            if results[key] != nil {
                results[key]!.append(element)
            } else {
                results[key] = [element]
            }
        }
        return results
    }
}

var list = ["apple", "apricot", "banana", "blackberry"]
let dict = list.groupBy {
    String($0.characters.prefix(1))
}

让我们一步一步地走过去:

  • groupBy接受一个函数,该函数为数组的每个元素提供一个键。它返回一个包含键和具有相同键的元素列表的字典。
  • f是一个提供密钥的函数.对于数组中的每个元素,请检查结果字典是否已经拥有该键。如果是,它将被追加到该键的元素列表中。如果不是,则为该键创建一个新数组。
票数 3
EN

Stack Overflow用户

发布于 2016-03-22 23:14:57

代码语言:javascript
复制
    //plain array
    let list = ["apple", "apricot", "banana", "blackberry"]

    //dictionary of arrays
    var dict = Dictionary<String, Array<String>>()

    //create necessary keys from first characters
    for word in list {

        if let _ = dict[ String( word.characters.prefix(1) )] {
            dict[ String( word.characters.prefix(1) )]?.append(word)
        }
        else{
            dict[ String( word.characters.prefix(1) ) ] = [word]
        }
    }

    //output dictionary
    print(dict)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36166764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档