You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将带索引参数的LINQ Where方法改写为非LINQ实现,修复输出大量零问题

原LINQ代码逻辑说明

你提供的LINQ版本代码:

playerhand[i] = numbers[0];
numbers = numbers.Where((source, index) => index != 0).ToArray();

实际实现两个功能:

  1. 将numbers数组的首个元素赋值给playerhand[i]
  2. 生成一个长度比原numbers数组小1的新数组,新数组包含原数组除索引0以外的所有元素,等价于移除原数组的第一个元素。
现有代码的问题
  • 逻辑匹配错误:原代码是按索引位置过滤元素,你编写的代码是按值匹配将所有和首个元素值相等的元素置为0,两者功能完全不符
  • 未调整数组长度:原LINQ执行后numbers数组长度会减1,你的代码仍使用原长度的数组,仅修改部分元素值为0,自然会输出大量多余的0
  • 循环边界设置错误:你使用的75 - i循环边界和原逻辑没有关联,会导致元素遍历不全或者数组越界。
修正后的非LINQ实现

通过创建新数组、复制除首元素外的所有内容即可实现等价效果:

playerhand[i] = numbers[0];
// 初始化长度少1的新数组
int[] newNumbers = new int[numbers.Length - 1];
// 从原数组索引1开始复制所有元素到新数组
for (int n = 1; n < numbers.Length; n++)
{
    newNumbers[n - 1] = numbers[n];
}
numbers = newNumbers;

内容的提问来源于stack exchange,提问作者Tin A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:57:00