【问题标题】:Call function N times and store result in an array using lamba调用函数 N 次并使用 lambda 将结果存储在数组中
【发布时间】:2013-11-04 00:36:38
【问题描述】:

我想调用一个函数 N 次并以 lambda-y 方式将结果存储在一个数组中(或将结果附加到一个列表中)。我该怎么做?

我已经尝试过Enumerable.Repeat( fun(), n ).ToArray();,这将是理想的,除了 fun() 只被调用一次。

【问题讨论】:

  • 您需要添加更多详细信息。什么类型的对象 - 细节人!
  • 在 lambda 中引用数组或列表,可能是捕获的变量。
  • @DonA - 假设有一个没有参数的函数,返回一个 int。看起来我应该可以使用 Enumerator.Repeat,但我现在很累。
  • “我现在很累”:你已经穿着睡衣了 ;-)

标签: c# lambda


【解决方案1】:

调用随机函数 n 次并保留所有结果。

IEnumerable<T> CallRepeatedly<T>(Func<T> a, int count)
{
    for(int i=0; i<count; i++)
    { 
       yield return a();
    }
    yield break;
}

您正在寻找类似的东西吗?我不确定 Func 在每次调用时返回不同结果的条件,但您可以轻松重构以将索引作为参数。

【讨论】:

  • 我没想过这样的事,狂野!
  • +1 基本上解释了 BrokenGlass 解决方案的工作原理。我会使用Enumerable.Range 版本,因为它具有相同的行为,但出错的机会更少。旁注:函数末尾不需要yield break - 这是隐含的。
  • 如果你将它添加到像public static class Enumerable {...} 这样的小类中,就像你想要的方法没有丢失一样。
【解决方案2】:

假设你的函数接受一个整数参数,那么这样的事情会起作用(否则用你需要的参数代替):

int n = 10;
var results = Enumerable.Range(0, n)
                        .Select(myFunction)
                        .ToArray();

在示例中,myFunction 可以是任何Func&lt;int, T&gt;,其中T 是您的返回类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2018-07-20
    相关资源
    最近更新 更多