gpt4 book ai didi

c# - 如何将 for(不是 foreach)循环转换为 Linq?

转载 作者:行者123 更新时间:2023-11-30 20:52:35 27 4
gpt4 key购买 nike

假设我想要一个包含 10 个数字的序列,并且我有一个按需生成数字的函数:

var s = new List<int>();
for (var i=0; i<10; i++) {
s.Add(Magically_generate_a_very_special_number());
}

是实现此目的的常用方法。但是,假设我想使用 LINQ。我已经可以做到了(让我们忽略类型之间的区别):

var s = Enumerable.Range(0, 10).Select(i => MathNet.Numerics.Statistics.DescriptiveStatistics())

这对我来说已经足够好了。然而,令我困扰的是我需要首先指定一个整数范围——这是一个多余的步骤,因为我无论如何都会丢弃该值。是否可以执行以下操作?

var s = Enumerable.ObjectMaker(Magically_generate_a_very_special_number).Take(10);

似乎 Enumerable.Repeat 几乎可以满足我的要求,但它获取我提供的函数的结果然后复制它,而不是重复计算该函数。

顺便说一句,这道题的灵感来自 Math.Net IContinuousDistribution.Samples 方法。它的主体如下所示:

while (true)
{
yield return Generate_a_random_number();
}

这样您就可以使用 myDistribution.Samples.Take 从分布中获取一系列样本。原则上,我可以只编写自己的方法以相同的方式生成迭代器,但我想知道是否已经存在一个迭代器。

最佳答案

您可以尝试使用 foreach 方法:

Enumerable.Take(10).ToList().Foreach(Magically_generate_a_very_special_number);

缺点恕我直言,你必须在两者之间做一个 ToList。

编辑 误读问题,所以 nvmd :)

关于c# - 如何将 for(不是 foreach)循环转换为 Linq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20762280/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com