gpt4 book ai didi

ios - 来自两个字符串数组的 double 组

转载 作者:搜寻专家 更新时间:2023-11-01 05:58:37 24 4
gpt4 key购买 nike

假设我有两个数组:

let arrayOne = ["Hi", "Hi", "Hello", "Not Hey", "Howdy", "Hi"]
let arrayTwo = ["Hi", "Hello", "Hey", "Not Howdy", "Hi", "Hi"]

我有这个 for 循环来获取 double 的相似度百分比:

var matches = 0

for (index, item) in enumerate(arrayOne) {
if item == arrayTwo[index] {
matches++
}
}

但是,如果这些数组更长并且我想要这些相似性的数据点而不是单个计算怎么办?我可以编写什么样的函数,它从数组中取出前 5 个元素,返回它们与 for 循环的相似性,然后继续处理下 5 个元素? IE。它将是一个接受两个字符串数组并返回一个 double 组的函数。我确信这是一个简单的问题,但我不知道如何处理一次获取 5 个数组元素然后返回一个 double 组(比如数据点与字符串数组的相似性)。

最佳答案

我不太清楚你在问什么,但是,你可能会发现使用 zipmapreduce 很有帮助。

例如,您可以像这样重写您的原始循环(假设是 Swift 2.0,您必须为 1.2 稍微重新安排):

zip(arrayOne, arrayTwo).reduce(0) { $0 + ($1.0 == $1.1 ? 1 : 0) }
// returns 4

zip 在每个相应位置创建一个新的元素对序列。

reduce 取一个起始值,然后通过对序列中的当前值和下一个值应用一个函数来保持运行值——记住这是一个成对元素序列,你想要相同时加1,不相同时加0。然后,这将为您提供两者匹配的位置数。

如果您想要一个数组,其中 true 表示在该点匹配,如果不同则为 false,您可以使用 map:

zip(arrayOne, arrayTwo).map(==)
// returns [true, false, false, false, false, true]

另一方面,如果您想要一个列表,列出每个位置的两个字符串之间的字符串长度差异,您可以将其更改为:

zip(arrayOne, arrayTwo).map { (a,b) in
a.characters.count - b.characters.count
}
// returns [0, -3, 2, -2, 3, 0]

正如一些人所建议的,Set 可能会有所帮助,例如:

let commonElements = Set(arrayOne).intersect(arrayTwo)
// returns strings present in both e.g. {"Hi", "Hello”}

如果您可以将数据作为一个集合来处理,即顺序无关紧要并且可以忽略重复项,那么这是一个很好的方法。如果顺序和重复很重要,您可能必须坚持使用数组。

关于ios - 来自两个字符串数组的 double 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31298487/

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