C# Linq-获取2个匹配元素之间的所有项目
提供了一个列表,我想选择2个给定项目之间的所有项目。(包括开始和结束参数) 我目前的解决办法如下:C# Linq-获取2个匹配元素之间的所有项目,c#,linq,C#,Linq,提供了一个列表,我想选择2个给定项目之间的所有项目。(包括开始和结束参数) 我目前的解决办法如下: private IEnumerable<string> GetAllBetween(IEnumerable<string> list, string begin, string end) { bool isBetween = false; foreach (string item in list) { if (item == begi
private IEnumerable<string> GetAllBetween(IEnumerable<string> list, string begin, string end)
{
bool isBetween = false;
foreach (string item in list)
{
if (item == begin)
{
isBetween = true;
}
if (item == end)
{
yield return item;
yield break;
}
if (isBetween)
{
yield return item;
}
}
}
private IEnumerable GetAllBetween(IEnumerable列表、字符串开始、字符串结束)
{
bool-isBetween=false;
foreach(列表中的字符串项)
{
如果(项目==开始)
{
isBetween=true;
}
如果(项目==结束)
{
收益回报项目;
屈服断裂;
}
如果(介于两者之间)
{
收益回报项目;
}
}
}
但是肯定会有一个相当好的linq查询完成同样的事情吗?您几乎可以使用SkipWhile
和TakeWhile
,但是您还需要最后一项-您需要from的功能。然后,您可以使用:
var query = source.SkipWhile(x => x != begin)
.TakeUntil(x => x == end);
static IEnumerable GetAllBetween(此列表,ta,tb)
{
var aOffset=list.IndexOf(a);
var bOffset=list.IndexOf(b);
//如果未找到一个或所有项目,该怎么办?
如果(-1==aOffset | |-1==bOffset)
{
//对于本例,我将返回一个空数组
返回新的T[]{};
}
//如果a在b之后怎么办?
如果(aOffset>bOffset)
{
//对于这个例子,我将简单地交换它们
int temp=偏移量;
aOffset=bOffset;
bOffset=温度;
}
return list.GetRange(aOffset,bOffset-aOffset);
}
我认为一个简单的跳过,接受就可以了。我通常将其用于分页ASP.NET结果站点
var startIndex = list.IndexOf(begin);
var endIndex = list.IndexOf(end);
var result = list.Skip(startIndex + 1).Take(endIndex - 1 - startIndex);
为什么会有漂亮的东西?这不是一个频繁的任务。它看起来像是一个简单任务的大量代码,所以我希望使用Linq可以将其减少到3-5行?事实上,我同意John Saunders的观点。尽管如此,如果您经常使用它,您可以将其作为扩展方法编写。
var startIndex = list.IndexOf(begin);
var endIndex = list.IndexOf(end);
var result = list.Skip(startIndex + 1).Take(endIndex - 1 - startIndex);