使用LINQ计算两个字符串之间的匹配字符

Jon*_*way 3 c# linq

一位朋友问我如何使用LINQ改进一些代码.你如何通过两个字符串之间的字符比较来计算索引的匹配数?这是原始代码,可以用LINQ进行改进吗?

private int Fitness(string individual, string target)
   {
       int sum = 0;
       for (int i = 0; i < individual.Length; i++)
           if (individual[i] == target[i]) sum++;
       return sum;
   }
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 5

return Enumerable.Range(0, individual.Length)
                 .Count(i => individual[i] == target[i]);
Run Code Online (Sandbox Code Playgroud)

一种更加万无一失的方法(如果target短于上述代码片段会失败individual):

return Enumerable.Range(0, Math.Min(individual.Length, target.Length))
                 .Count(i => individual[i] == target[i]);
Run Code Online (Sandbox Code Playgroud)

我相信代码是正确的.Enumerable.Rangemethod有两个参数.第一个是起始索引(应该是0),第二个是项目的数量.要测试并确保完整的代码段:

class Program {
  static void Main(string[] args) {
      Console.WriteLine(Fitness("hello", "world"));
  }
  static int Fitness(string individual, string target) {
      return Enumerable.Range(0, Math.Min(individual.Length, target.Length))
                       .Count(i => individual[i] == target[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • `Range`的第二个参数是count,而不是最后一项. (2认同)