相关疑难解决方法(0)

LINQ相当于foren for IEnumerable <T>

我想在LINQ中做相同的以下内容,但我无法弄清楚如何:

IEnumerable<Item> items = GetItems();
items.ForEach(i => i.DoStuff());
Run Code Online (Sandbox Code Playgroud)

什么是真正的语法?

linq ienumerable foreach

694
推荐指数
12
解决办法
46万
查看次数

使用LINQ获取IEnumerable中的上一个和下一个项目

我有一个自定义类型的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)用来获取上一个或下一个项目.

  1. 哪两个选项更好?
  2. 有没有更好的选择?

"更好"包括性能(内存和速度)和可读性的组合; 可读性是我的主要关注点.

c# linq ienumerable

32
推荐指数
3
解决办法
4万
查看次数

使用LINQ创建一个IEnumerable <>的delta值

我有一个时间戳列表(以刻度表示),从这个列表中我想创建另一个表示条目之间的增量时间的列表.

我们只是说,例如,我的主时间表如下所示:

  1. 10
  2. 20
  3. 三十
  4. 50
  5. 60
  6. 70

我想要的是这个:

  1. 10
  2. 10
  3. 20
  4. 10
  5. 10

我在这里要完成的是通过计算标准偏差来检测输出表中的#3是异常值.我以前没有统计过,但我想如果我在输出列表中查找流行值并丢弃1 sigma之外的任何内容,这对我来说就足够了.

我希望能够使用单个LINQ查询创建输出列表,但我还没有想出来.目前我只是通过循环强制它.

c# linq statistics .net-3.5

12
推荐指数
1
解决办法
2397
查看次数

Linq to Objects - 从数字列表中返回数字对

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}.

c# linq linq-to-objects aggregate slice

12
推荐指数
2
解决办法
4595
查看次数

如何用自己压缩一个IEnumerable

我正在实现一些基于点列表的数学算法,如距离,面积,质心等.就像在这篇文章中一样:找到使用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)

虽然肯定比我的初始版本更复杂,但是这一次迭代输入序列一次而原始迭代两次. …

.net c# linq algorithm geometry

7
推荐指数
1
解决办法
1954
查看次数

是否有相当于C#中的F#Seq.windowed?

我正在研究一些C#代码处理像移动平均线这样的问题,我经常需要使用List/IEnumerable并处理大量的连续数据.F#Seq模块具有很好的功能,窗口化,它接收序列,返回一系列连续元素的序列.

C#是否具有与LINQ开箱即用的等效功能?

c# linq f# windowed

7
推荐指数
1
解决办法
1596
查看次数

在JavaScript正则表达式匹配中移动索引

我有这个正则表达式从文本中提取双字

/[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

我怎样才能实现这个输出?据我了解,搜索索引移动到第一场比赛结束.我该如何将它移回一个单词?

javascript regex

6
推荐指数
2
解决办法
934
查看次数