Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
在swift检查相同性时需要比较两个字符串数组_Swift_Algorithm - Fatal编程技术网

在swift检查相同性时需要比较两个字符串数组

在swift检查相同性时需要比较两个字符串数组,swift,algorithm,Swift,Algorithm,我正在尝试写一个算法,它能为某些人的预测准确度打分。该程序的工作原理如下:用户从40个名字的列表中选择10个。然后将他们的选择与这40个名字中的10个名字进行比较,并根据他们选择的准确程度对他们进行评分。我该怎么办?Levenshtein距离似乎不起作用,因为它不考虑列表的顺序,只考虑列表中字符的存在。有什么想法吗?如果您只想详细说明您的方法,则无需编写代码,但如果您确实提供了代码,我将用swift编写此算法,因此请随意使用。谢谢 更新: 大家好,非常感谢你们的来电!每个发布算法的人都有一个很好

我正在尝试写一个算法,它能为某些人的预测准确度打分。该程序的工作原理如下:用户从40个名字的列表中选择10个。然后将他们的选择与这40个名字中的10个名字进行比较,并根据他们选择的准确程度对他们进行评分。我该怎么办?Levenshtein距离似乎不起作用,因为它不考虑列表的顺序,只考虑列表中字符的存在。有什么想法吗?如果您只想详细说明您的方法,则无需编写代码,但如果您确实提供了代码,我将用swift编写此算法,因此请随意使用。谢谢

更新:

大家好,非常感谢你们的来电!每个发布算法的人都有一个很好的解决方案,所以谢谢你。为了提供更多的上下文,数组40是一个由40个参赛者组成的列表。每个用户从列表中选择10个名字,按照他们认为这40名运动员将在排行榜上排名的顺序排列,因此他们的排名的实际指数非常重要,因为按照与结果相反的顺序预测所有10名运动员的人不应该与以完美顺序预测所有10名运动员的人有相同的分数

我提出的算法首先检查每个数组中是否存在匹配的名称,如果用户仅仅预测某个人最终会进入前10名,则将用户分数增加1。然后,如果该用户预测了数组中名称的正确索引,他们会得到另一个点,因此我嵌套了一个索引比较。此外,如果用户正确预测了获胜者、第二名或第三名,他们将获得额外的分数,以处理边缘情况,即正确率为8、9和10的人与完美领奖台的人得分相同

让我知道你对这件事的看法,每个人!我是否遗漏了任何边缘案例?

以下是我的建议: 让我们调用正确答案数组A和用户数组B

检查数组A 在每个项目上,在B数组中搜索它 如果未找到,分数将为零,否则如果找到,分数将为B上的差距指数-A上的差距指数 复杂性为^2,但由于输入为10,因此这不是问题

另一个建议:修改排序算法以计算它正在执行的步骤数,对数组A排序并保留分数,对数组B排序并比较分数。。。
从理论上讲,它将反映距离,但这可能取决于您将使用哪种排序算法。让A为包含用户选择的数组,B为包含正确选择的数组。对于A的每个元素,检查该元素是否在B数组中。如果没有此类元素,则添加0分。如果存在这样的元素,则添加100-D2点,其中D是两个元素之间的距离,例如,如果元素位于阵列A的第5位置,而位于阵列B的第7位置,则距离为2。总分是各要素得分之和

使用集合和交集找出有多少匹配项:

var userSelections = ["b", "c", "d", "e", "f", "g", "h", "i", "j", "z"]
var correctResults = ["b", "a", "d", "c", "e", "f", "h", "g", "i", "j"]

let matches = Set(correctResults).intersection(userSelections).count

print("you got \(matches) of \(correctResults.count) right")

var placeMatches = 0
for i in correctResults.indices {
    if userSelections[i] == correctResults[i] {
        placeMatches += 1
    }
}

print("you placed \(placeMatches) correctly")

// Give 3 points for picking winner, 2 for place, and 1 for show
var bonus = 0

for i in 0 ..< 3 {
    if userSelections[i] == correctResults[i] {
        bonus += (3 - i)
    }
}

print("you earned \(bonus) bonus points")

print("total score = \(matches + placeMatches + bonus)")
你答对了10分中的9分你答对了3分你赢了4分 加分总分=16分


你如何定义一个选择的准确性?如果你能提供更多的上下文,比如一个你想要完成的事情和你期望的结果的例子。这将更容易回答您的问题如果职位相关,那么您可以根据用户列表中元素之间的距离为每个元素添加一定的分数,包含正确姓名的列表请参见我的详细答案。您可能希望对挑选的物品进行加权,例如,挑选获胜者得3分,挑选地点得2分,挑选表演得1分。我认为分数应取决于猜测位置与实际位置之间的距离。给出+1并不区分9个位置的错误猜测,例如第1个位置而不是第10个位置,以及一个位置的错误猜测,例如第2个位置而不是第3个位置。