c# - 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 是最好的方法还是应该使用倒数函数?
谢谢
解决方案
如果你真的想使用 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();
推荐阅读
- google-cloud-firestore - 当另一个字段更改时,如何使用谷歌云功能更新 Firestore 数据库中的字段?
- javascript - 如何修复“超出最大更新深度。在 componentWillUpdate 或 componentDidUpdate 中调用 setState。” 反应错误?
- python - 整个 tan() 函数的长度在 Python 中被两行截断?
- java - java.lang.OutOfMemoryError:在 maven 中运行 findbugs 时超出了 GC 开销限制
- laravel - Laravel 如何使用服务器发送事件捕获事件
- c# - C# Xamarin Forms 代码在加载时不执行但在按钮单击时执行
- sql - 如何合并 BigQuery 数据集中的一千个表?
- python - 自动为 pandas DataFrame 分配名称
- r - grid.arrange 用于绘图列表
- angular - 如何让 Typescript 抛出运行时错误?