gpt4 book ai didi

c# - 用自身抵消可枚举的最佳方法

转载 作者:行者123 更新时间:2023-11-30 22:05:02 25 4
gpt4 key购买 nike

给定来源 IEnumerable<T>和一个正整数偏移量和一个合并函数Func<T,T,TResult>我想制作一个新的 IEnumerable<TResult>

可能的签名如下:

public static IEnumerable<TResult> Offset<T, TResult>(
this IEnumerable<T> source, int offset, Func<T,T,TResult> selector
);

这是一个使用以下输入的示例,它将生成可枚举的偏移量并选择偏移部分的总和。

typeof(T) = typeof(int);
typeof(TResult) = typeof(int);
source = Enumerable.Range(0, 10);
offset = 1;
selector = (original, offsetValue) => original + offsetValue;

result = source.Offset(offset, selector);

expected = new int[]{1,3,5,7,9,11,13,15,17};
Assert.IsTrue(expected.SequenceEquals(result));

这里一个很重要的目标是枚举来源IEnumerable<T>只有一次。

最佳答案

您需要跟踪以前的 offset 项目。 Queue 可能是执行此操作的最有效工具。如果所述队列中有足够的项目,将当前项目与出队项目配对并产生它。

public static IEnumerable<TResult> Offset<T, TResult>(
this IEnumerable<T> source, int offset, Func<T, T, TResult> selector)
{
var queue = new Queue<T>(offset);
foreach (var item in source)
{
if (queue.Count >= offset)
yield return selector(queue.Dequeue(), item);

queue.Enqueue(item);
}
}

关于c# - 用自身抵消可枚举的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24659167/

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