gpt4 book ai didi

c# - 最佳地比较字符串列表

转载 作者:行者123 更新时间:2023-12-02 00:35:45 25 4
gpt4 key购买 nike

我想使用 Damerau 到 Levenshtein 距离来比较字符串列表

目前我有:

char lastchar = (char)('z'+1);

SimilarStrings similarStrings = new SimilarStrings();

List<String> listString = new List<string>();

listString.Add("Rammstein");
listString.Add("Ramstein");
listString.Add("Rammsten");

listString.Add("Metallica");
listString.Add("Metalica");
listString.Add("Metaica");

for (int i = 0; i < listString.Count(); i++)
{
for(int n = 0; n < listString.Count(); n++)
{
String str1 = String.Copy(listString[i]);
String str2 = String.Copy(listString[n]);
Console.Write(str1); Console.Write(" to "); Console.Write(str2 + "\n");
int DADistance = SimilarStrings.damerauLevenshteinDistance(str1, str2, (int)lastchar);
Console.WriteLine(DADistance);
}
}

这基本上工作得很好,唯一的问题是每次比较都会进行两次。这意味着例如将“Rammstein”与“Metallica”进行比较,然后再次将“Metallica”与“Rammstein”进行比较。对比一半就够了。但我该如何以良好的方式做到这一点呢?我只能想到一些复杂的办法。

最佳答案

标准的方式是从外循环索引加一开始内循环。

for (int i = 0; i < listString.Count(); i++)
for (int n = i + 1; n < listString.Count(); n++)

假设您不想将每个字符串与其自身进行比较 - 如果您这样做,请删除 + 1

这是一个逻辑示例。如果您的列表是:a b c d,您需要将 a 与:

a <> b
a <> c
a <> d

对于 b,您不需要将 ba 进行比较,因为您已经比较了 a对一切。所以你可以从c开始:

b <> c
b <> d

对于 c,您已经将 ab 与所有内容进行了比较,因此您可以从 d 开始:

c <> d

因此,每个元素只需与列表中之后的元素进行比较 - 这就是上面的嵌套循环所表达的内容。

关于c# - 最佳地比较字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25297766/

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