Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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/2/.net/23.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
C# 以最佳方式相互比较字符串列表_C#_.net - Fatal编程技术网

C# 以最佳方式相互比较字符串列表

C# 以最佳方式相互比较字符串列表,c#,.net,C#,.net,我想用Damerau到Levenshtein距离来比较字符串列表 目前我有: char lastchar = (char)('z'+1); SimilarStrings similarStrings = new SimilarStrings(); List<String> listString = new List<string>(); listString.Add("Rammstein"); list

我想用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);
            }
        }
char lastchar=(char)('z'+1);
SimilarString SimilarString=新的SimilarString();
List listString=新列表();
添加(“Rammstein”);
添加(“Ramstein”);
添加(“Rammsten”);
添加(“Metallica”);
添加(“Metalica”);
添加(“Metaica”);
对于(int i=0;i

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

标准方法是从外循环索引加上一开始内环

for (int i = 0; i < listString.Count(); i++)
    for (int n = i + 1; n < listString.Count(); n++)
对于
b
,您不需要将
b
a
进行比较,因为您已经将
a
与所有内容进行了比较。因此,您可以从
c
开始:

b <> c
b <> d

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

这应该可以防止重复比较

    for (int i = 0; i < listString.Count(); i++)
    {
        for(int n = i + 1; n < listString.Count(); n++)
        {
            ...
        }
    }
for(int i=0;i
c <> d
    for (int i = 0; i < listString.Count(); i++)
    {
        for(int n = i + 1; n < listString.Count(); n++)
        {
            ...
        }
    }