Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将一个数组过滤为另一个数组的和_Arrays_Swift - Fatal编程技术网

Arrays 将一个数组过滤为另一个数组的和

Arrays 将一个数组过滤为另一个数组的和,arrays,swift,Arrays,Swift,我有一个包含许多元素的数组,但其中两个元素对我很重要。 语言 和数量 我从他们那里得到了类似的信息 _ = cities[0].language \\give me a string languages(it could be any languages and maybe it's nil, but all the language are written in same way (for example it's always English, not english) 及 例如,它给

我有一个包含许多元素的数组,但其中两个元素对我很重要。 语言 和数量

我从他们那里得到了类似的信息

_ = cities[0].language 

\\give me a string languages(it could be any languages and maybe it's nil, but all the language are written in same way (for example it's always English, not english)

例如,它给了我类似的东西

_ = cities[0].language 

\\give me a string languages(it could be any languages and maybe it's nil, but all the language are written in same way (for example it's always English, not english)
英文“124324”

法文“5634”

英文“753”

德语“8643”

德语“532”

无“6532”

我想创建一个新数组(我们调用
languageInfo
),它是通过过滤
cities
数组创建的。 我需要它将所有相同的语言与它们的数字之和结合在一起,例如,输出应该是这样的

例如,它给了我类似的东西

_ = cities[0].language 

\\give me a string languages(it could be any languages and maybe it's nil, but all the language are written in same way (for example it's always English, not english)
英文“125077”

德语“9175”

法文“5634”

“无”“6532”


谁能告诉我怎么做吗?

使用reduce对数字求和并转换成字典

正如注释
reduce
中所指出的,可以用更简洁的形式编写

let dict = cities.reduce(into: [:]) { $0[$1.language ?? "", default: 0] += $1.number }

原版

请注意,如果language为nil,我将使用空字符串作为键,另一个选项是忽略这些元素

let dict2 = cities.reduce(into: [String: Int](), { result, city in
    var value = city.number
    if let key = city.language {
        if let sum = result[key] {
            value += sum
        }
        result[key] = value
    }
})
或者正如注释中指出的,允许
nil
作为键

let dict = cities.reduce(into: [String?: Int](), { result, city in
    var value = city.number
    let key = city.language
    if let sum = result[key] {
        value += sum
    }
    result[key] = value
})

到目前为止,你做了哪些没有成功的尝试?你能发布一些代码吗?事实上我不知道如何按照我想要的方式过滤此类数据,我以前从未做过类似的事情,我会看看数组reduce函数。此外,我建议您在最终结果中使用字典,因为我认为设计比数组更适合您的情况。例如:
字典
。如果您继续与之斗争,那么请发布一些代码更新,以便我们可以帮助您的方式。您也可以只使用
[String?:Int]
而不是
[String:Int]
作为字典type@MichaelFourre谢谢,我对java非常熟悉,所以密钥不能为零。我真的非常感谢你的帮助。亲爱的@JoakimDanielson,有个问题,“我现在如何打印最常用的语言及其百分比?”罗伯特:这是一个完全不同的问题,但你可以像(但使用>而不是>那样)对字典进行排序