首页 > 解决方案 > Linq - 在其他两个之间选择周围的对象

问题描述

我有一个复杂的谜题要给你。
我有一种情况,我有一个对象集合,我要返回给定类型的对象之间的所有对象。
我也有一个我知道在该集合内的对象,我也知道它在两个对象之间。
所以我想返回一组位于给定类型的两个对象之间的周围对象(和自身)。

这有意义吗?

这是我到目前为止的一个例子:
这个集合中有两个集合。
此查询返回第一组对象,但我不检查已知对象是否在该组内,并且不会继续搜索集合。

class Between { }
class Known{}

var bob = new Known();

var objs = new object[]
{
  "Outside",
  new Between(),
  "Inside",
  bob,
  "Inside",
  new Between(),
  "Outside",
  new Between(),
  "Inside",
  "Inside",
  new Between(),
  "Outside"
};
var objsBetween = objs
    .SkipWhile(x => x.GetType() != typeof(Between))
    .Skip(1)
    .TakeWhile(x => x.GetType() != typeof(Between)).ToList();
//...Result
/*
{
  "Inside",
  bob,
  "Inside"
}
*/

你明白我想要做什么吗?
Linq 是最好的方法还是应该使用倒数函数?

谢谢

标签: c#linq

解决方案


如果你真的想使用 LINQ,你可以让它与Aggregate()一起工作,但我可能只是创建一个迭代器方法,因为我认为代码更清晰:

IEnumerable<object> GetBetween(IEnumerable<object> items, Type betweenType)
{
    bool between = false;

    foreach (object item in items)
    {
        if (item.GetType() == betweenType)
            between = !between;
        else if (between)
            yield return item;
    }
}

然后你可以这样做:

var objsBetween = GetBetween(objs, typeof(Between)).ToList();

推荐阅读