我有一个平面可枚举字符串,其中包含基于某些标准(在本例中为整数)标识的主记录,后跟任意数量的详细记录。从细节到它的主记录没有硬性联系 - 唯一的联系是主记录的位置在其细节记录之前。
我创建了一个 Linq 查询,可以得到我想要的结果,但如果可能的话,我宁愿不做SkipWhile()
andTakeWhile()
调用。感觉非常低效,特别是因为我可以在 O(n) 处将这个查询作为一个简单的 foreach 循环来执行。
这是一个模拟示例,它返回我想要的结果,但没有我想要的效率:
var data = new[] {"1", "a", "b", "c", "2", "d", "e", "3", "1", "f", "g", "h", "i", "2", "j", "k", "l"};
int throwAway;
var indexedData = data.Select((item, index) => new {item, index} );
var results =
from a in indexedData
where Int32.TryParse(a.item, out throwAway) == true
select new {
HeaderIndex = a.index,
HeaderValue = a.item,
Details =
indexedData
.SkipWhile((x) => x.index <= a.index)
.TakeWhile(x => Int32.TryParse(x.item, out throwAway) == false)
.Select(x => x.item)
};
results.Dump();
有没有一种方法可以在 Linq 中更有效地执行此查询,而无需求助于传统循环?