【问题标题】:c# Taking two elements from a list at a time [duplicate]c#一次从列表中获取两个元素[重复]
【发布时间】:2021-03-04 23:46:53
【问题描述】:

我有一个像 x [28, 19, 24, 50, 29, 43] 这样的元素列表,并且想一次取两个元素来处理它(第一次迭代将经过 28、19,第二次经过24、50 等)。

每次我遍历两个元素时,我都需要将它们相加并除以 2 以获得它们的平均值,然后将该平均值保存到另一个列表中。

我试过类似的东西:

List<double> avg = new List...;

for(int i = 1; i < x.Count(); i++)
        {
            if(i%2 == 0)
            {
                double D = x[i] + x[i - 1] / 2;
                avg.Add(D);
            }
        }

任何形式的帮助将不胜感激。谢谢!!!

【问题讨论】:

  • 我不完全明白问题是什么,但如果你跳过 2 对,在 for 行中它不应该是 i++,而是 i+=2。跨度>
  • 对我有用(除了您忘记为平均计算设置括号)-您的问题到底是什么?你想问什么问题?
  • @Alejandro 但是我如何获取和总结被迭代的两个元素。抱歉,英语不是我的母语。
  • “但是我如何获取和总结被迭代的两个元素” - 你已经在你的代码中这样做了。请尝试更准确地描述您的实际问题(在您的问题中,而不是在 cmets 中)
  • @Franz Gleichmann 哦,所以问题不在这部分代码中。我使用此代码的方法没有返回正确的值。我查看了我的代码的其他部分。我确信这是问题所在,但我想不是。谢谢!

标签: c# list


【解决方案1】:

您的代码中有 3 个问题:

  1. 您从索引 1 开始循环,但由于 if (i%2 == 0),将跳过索引 1,因此基本上循环从 2 开始。因此,将条件更改为 if (i%2 == 1)
  2. 要获得平均值,您需要将两个数字相加,然后除以 2。您使用一个数字并加上第二个数字的一​​半。使用大括号来解决这个问题:(x[i] + x[i - 1]) / 2
  3. 您使用整数除法,但期望得到双精度结果。通过除以2.0 而不是2 来解决这个问题:(x[i] + x[i - 1]) / 2.0

完整代码:

var x = new List<int>{28, 19, 24, 50, 29, 43};
List<double> avg = new List<double>();

for(int i = 1; i < x.Count(); i++)
{
    if(i%2 == 1)
    {
        double D = (x[i] + x[i - 1]) / 2.0;
        avg.Add(D);
    }
}

但是,代码似乎太复杂了。如果你几个月后再读一遍,你可能就不会再明白了。

恕我直言

  • 最好从索引 0 开始,因为这是处理数组所有数字的常用方法。
  • 无需奇怪的模运算,只需按 2 步走即可。
  • 更改变量的名称。
  • 添加一些前提条件检查是否可以进行平均
var pairs = new List<int>{28, 19, 24, 50, 29, 43};

List<double> averages = new List<double>();
if (pairs.Count() %2 != 0) throw new ArgumentException("Can't build averages on that list. The list needs to have an even number of elements.");
for(int i = 0; i < pairs.Count() - 1; i+=2)
{
    double average = (pairs[i] + pairs[i + 1]) / 2.0;
    averages.Add(average);
}

【讨论】:

  • 为什么不直接使用i += 2 并完全删除if (i%2 == 1)
  • @Knoop:当您阅读答案时,我还没有完成重构。现在还包括 4 项改进。
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 2022-07-09
  • 1970-01-01
  • 2021-04-14
  • 2022-01-01
  • 2019-06-28
相关资源
最近更新 更多