【发布时间】:2019-11-29 06:31:23
【问题描述】:
我有两个数字列表,第一个列表有 365 个数字,另一个有 8760。
我想先循环第一个列表并获取值。然后在第一个循环中,我想循环第二个列表,每次都得到 24 个数字。
对于下一次迭代,它将跳过前 24 个并获取下一个 24 个。
问题是每次打印时“countelev”似乎都没有改变并停留在“24”。应该改成48,72,96....
这是我的代码:
foreach (var dec in declinationangle)
{
double declination = dec;
double elev = Degreetoradian(declination);
double lati = Degreetoradian(latitude);
// Solar elevation angle, expressed as α, is the angular height of the
//sun in the sky measured from the horizontal 0° at sunrise and 90° when
//the sun is right overhead.
//α = sin−1 (sin δ sin φ + cos δ cos φ cos τ)
int countelev = 0;
foreach (var hra in Solarhourangle.Skip(countelev).Take(24))
{
double hras = Degreetoradian(hra);
double elev1 = Math.Sin(elev) * Math.Sin(lati);
double elev2 = Math.Cos(elev) * Math.Cos(lati) * Math.Cos(hras);
double slav = Math.Asin(elev1 + elev2);
double sla = Radiantodegree(slav);
solarelevationangle.Add(sla);
}
countelev += 24;
TaskDialog.Show("countelev", countelev.ToString());
}
【问题讨论】:
-
int countelev = 0定义在foreach (var dec in declinationangle)的范围内,每次都设置为0。将其移到第一个 foreach 块范围之外。 -
我通过将 int count =0 放在 foreach 循环之外解决了这个问题。谢谢!
-
OT 你的内部
foreach将遍历整个列表,直到达到该计数值(然后再达到 24 个)。一个简单的for-loop 在索引上从 countelev 开始并在 24 之后结束(或者更快,如果达到终点)会更有效 -
@RoyLin 当回答对您有帮助时,通常会支持see here
-
"我想先循环第一个列表并获取值。"什么价值?一个具体的值,还是一个计算出来的值?请解释一下。