int distance = s.ToCharArray()
.Zip(t.ToCharArray(), (c1, c2) => new { c1, c2 })
.Count(m => m.c1 != m.c2);
此代码ID用于计算汉明距离,但似乎无法理解它的工作方式(我是c#的初学者)
答案 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;