gpt4 book ai didi

ios - 计算包含相同两个值的数组的数量

转载 作者:行者123 更新时间:2023-11-28 13:20:20 25 4
gpt4 key购买 nike

给定一个 Dictionary<String, Arrary<Int>>在第一个 5 中找出有多少条目具有相同的两个指定值Array<Int> 中的条目.

例如:

给定:

let numberSeries = [

"20022016": [07,14,36,47,50,02,05],
"13022016": [16,07,32,36,41,07,09],
"27022016": [14,18,19,31,36,04,05],

]

值:736 , 结果应该是 2因为第一个和第二个条目的值都是 736在条目数组的前 5 个条目中。

我尝试了很多方法来实现这一点,但我一直无法让它发挥作用。

这是我目前的尝试:

//created a dictionary with (key, values)

let numberSeries = [

"20022016": [07,14,36,47,50,02,05],
"13022016": [16,07,32,36,41,07,09],
"27022016": [14,18,19,31,36,04,05],

]

var a = 07 //number to look for
var b = 36 // number to look for

// SearchForPairAB // search for pair // Doesn't Work.

var ab = [a,b] // pair to look for
var abPairApearedCount = 0

for (kind, numbers) in numberSeries {
for number in numbers[0...4] {
if number == ab { //err: Cannot invoke '==' with argument listof type Int, @Value [Int]
abPairApearedCount++
}
}
}

这给出了错误:Cannot invoke '==' with argument listof type Int, @Value [Int]在线:if number == ab

最佳答案

您不能使用 ==比较 IntArray<Int> ,从比较的角度来看,这没有任何意义。有很多不同的方法可以实现你想要做的事情。在这种情况下,我可能会使用 map/reduce数你的对数。

思路是map ab 中的值数组到 Bool值取决于该值是否在您的 numbers 中大批。然后,reduce那些映射Bool s 为单个值:true如果他们都是true , 或 false .如果那个reduce d值为true , 然后我们找到了这对,所以我们增加了计数。

var ab = [a,b] // pair to look for
var abPairApearedCount = 0

for (kind, numbers) in numberSeries {
let found = ab.map({ number in
// find is a built-in function that returns the index of the value
// in the array, or nil if it's not found
return find(numbers[0...4], number) != nil
}).reduce(true) { (result, value: Bool) in
return result && value
}
if found {
abPairApearedCount++
}
}

实际上可以通过使用 Swift 的一些更简洁的语法来压缩很多:

var ab = [a,b] // pair to look for
var abPairApearedCount = 0

for (kind, numbers) in numberSeries {
let found = ab.map({ find(numbers[0...4], $0) != nil }).reduce(true) { $0 && $1 }
if found {
abPairApearedCount++
}
}

并且,为了好玩,可以使用 reduce 进一步压缩而不是 for-in循环:

var ab = [a,b] // pair to look for
var abPairApearedCount = reduce(numberSeries, 0) { result, series in
result + (ab.map({ find(series.1[0...4], $0) != nil }).reduce(true) { $0 && $1 } ? 1 : 0)
}

虽然这变得相当难以阅读,所以我可能会扩展其中的一些内容。

关于ios - 计算包含相同两个值的数组的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26491195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com