我想在LINQ中做相同的以下内容,但我无法弄清楚如何:
IEnumerable<Item> items = GetItems();
items.ForEach(i => i.DoStuff());
Run Code Online (Sandbox Code Playgroud)
什么是真正的语法?
我有一个自定义类型的IEnumerable.(我是从SelectMany那里得到的)
我在IEnumerable中也有一个项目(myItem),我希望IEnumerable中的上一个和下一个项目.
目前,我正在做这样的想法:
var previousItem = myIEnumerable.Reverse().SkipWhile(
i => i.UniqueObjectID != myItem.UniqueObjectID).Skip(1).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
我可以通过简单地省略来获得下一个项目.Reverse.
或者,我可以:
int index = myIEnumerable.ToList().FindIndex(
i => i.UniqueObjectID == myItem.UniqueObjectID)
Run Code Online (Sandbox Code Playgroud)
然后.ElementAt(index +/- 1)用来获取上一个或下一个项目.
"更好"包括性能(内存和速度)和可读性的组合; 可读性是我的主要关注点.
我有一个时间戳列表(以刻度表示),从这个列表中我想创建另一个表示条目之间的增量时间的列表.
我们只是说,例如,我的主时间表如下所示:
我想要的是这个:
我在这里要完成的是通过计算标准偏差来检测输出表中的#3是异常值.我以前没有统计过,但我想如果我在输出列表中查找流行值并丢弃1 sigma之外的任何内容,这对我来说就足够了.
我希望能够使用单个LINQ查询创建输出列表,但我还没有想出来.目前我只是通过循环强制它.
var nums = new[]{ 1, 2, 3, 4, 5, 6, 7};
var pairs = /* some linq magic here*/ ;
Run Code Online (Sandbox Code Playgroud)
=> pairs = {{1,2},{3,4},{5,6},{7,0}}
元素pairs应该是两元素列表,或者是一些具有两个字段的匿名类的实例,例如new {First = 1, Second = 2}.
我正在实现一些基于点列表的数学算法,如距离,面积,质心等.就像在这篇文章中一样:找到使用linq导航点列表所需的距离
该职位介绍如何通过基本上压缩和解序列"与自身",由1偏移的原始的IEnumerable的开始位置生成用于拉链的序列来计算点的序列(按顺序取)的总距离.
因此,考虑到在.NET 4.0中的zip扩展,假设点的点类型,以及合理的距离公式,你可以拨打电话这样从一个点到下一个,然后生成距离的顺序来总结的距离:
var distances = points.Zip(points.Skip(1),Distance);
double totalDistance = distances.Sum();
Run Code Online (Sandbox Code Playgroud)
面积和质心计算类似,因为它们需要迭代序列,处理每对点(点[i]和点[i + 1]).我想过制作一个通用的IEnumerable扩展,适合实现这些(可能还有其他)算法,这些算法在序列上运行,一次取两个项目(points [0]和points [1],points [1]和points [2], ...,点[n-1]和points [n](或者是n-2和n-1 ......)并应用函数.
我的通用迭代器将具有与Zip类似的签名,但它不会收到第二个要压缩的序列,因为它实际上只是自己压缩.
我的第一次尝试看起来像这样:
public static IEnumerable<TResult> ZipMyself<TSequence, TResult>(this IEnumerable<TSequence> seq, Func<TSequence, TSequence, TResult> resultSelector)
{
return seq.Zip(seq.Skip(1),resultSelector);
}
Run Code Online (Sandbox Code Playgroud)
开始编辑: 在看到响应后,我已经实现了Pairwise,并明确使用了底层的Enumerator,如下所示:
public static IEnumerable<TResult> Pairwise<TSequence, TResult>(this IEnumerable<TSequence> seq, Func<TSequence, TSequence, TResult> resultSelector)
{
TSequence prev = default(TSequence);
using (IEnumerator<TSequence> e = seq.GetEnumerator())
{
if (e.MoveNext()) prev = e.Current;
while (e.MoveNext()) yield return resultSelector(prev, prev = e.Current);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然肯定比我的初始版本更复杂,但是这一次迭代输入序列一次而原始迭代两次. …
我正在研究一些C#代码处理像移动平均线这样的问题,我经常需要使用List/IEnumerable并处理大量的连续数据.F#Seq模块具有很好的功能,窗口化,它接收序列,返回一系列连续元素的序列.
C#是否具有与LINQ开箱即用的等效功能?
我有这个正则表达式从文本中提取双字
/[A-Za-z]+\s[A-Za-z]+/g
这个示例文本
Mary had a little lamb
我的输出就是这个
[0] - Mary had; [1] - a little;
而我的预期输出是这样的:
[0] - Mary had; [1] - had a; [2] - a little; [3] - little lamb
我怎样才能实现这个输出?据我了解,搜索索引移动到第一场比赛结束.我该如何将它移回一个单词?
linq ×6
c# ×5
ienumerable ×2
.net ×1
.net-3.5 ×1
aggregate ×1
algorithm ×1
f# ×1
foreach ×1
geometry ×1
javascript ×1
regex ×1
slice ×1
statistics ×1
windowed ×1