一位朋友问我如何使用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)
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)
| 归档时间: |
|
| 查看次数: |
4241 次 |
| 最近记录: |