需要帮助来了解此特定代码

时间:2019-04-14 14:29:28

标签: c#

int distance = s.ToCharArray()
                .Zip(t.ToCharArray(), (c1, c2) => new { c1, c2 })
                .Count(m => m.c1 != m.c2);

此代码ID用于计算汉明距离,但似乎无法理解它的工作方式(我是c#的初学者)

1 个答案:

答案 0 :(得分:1)

给定两个相同长度的字符串,汉明距离被定义为每个位置上不同字符的数量,例如 best test 的距离为1。您提供的代码使用Zip函数为字符串中的每个位置(索引)创建一个字符对列表。让我们一步一遍地检查代码:

假设您有以下两个字符串:

string s = "test";  
string t = "best";

string.ToCharArray()将它们转换为char的数组:

char[] sChars = ['t', 'e', 's', 't'];
char[] tChars = ['b', 'e', 's', 't'];

然后,在它们上应用sChars.Zip(tChars, (c1, c2) => new { c1, c2 }),创建一个字符对列表(实际上是包含两个chars的匿名类):

var zippedChars = [
     {c1 = 't', c2 = 'b'},
     {c1 = 'e', c2 = 'e'},
     {c1 = 's', c2 = 's'},
     {c1 = 't', c2 = 't'}
];

然后zippedChars.Count(m => m.c1 != m.c2)计算该对中第一个字符与另一个不相等的位置:

var distance = 1;