【发布时间】:2012-07-11 17:34:10
【问题描述】:
我想要一种方法,它可以在谓词处拆分 IEnumerable,并根据它们相对于谓词的索引将项目组合在一起。例如,它可以在满足x => MyRegex.Match(x).Success 的项目上拆分List<string>,并将这些匹配项“介于两者之间”的项目组合在一起。
它的签名可能看起来很像
public static IEnumerable<IEnumerable<TSource>> Split<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate,
int bool count
)
,可能带有包含所有分隔符的输出的额外元素。
有没有比foreach 循环更有效和/或更紧凑的方法来实现它?我觉得应该可以用 LINQ 方法来实现,但我不能指望它。
示例:
string[] arr = {"One", "Two", "Three", "Nine", "Four", "Seven", "Five"};
arr.Split(x => x.EndsWith("e"));
以下任何一种都可以:
IEnumerable<string> {{}, {"Two"}, {}, {"Four", "Seven"}, {}}
IEnumerable<string> {{"Two"}, {"Four", "Seven"}}
用于存储匹配的可选元素是{"One", "Three", "Nine", "Five"}。
【问题讨论】:
-
你的意思不是
group by? -
“分裂”是什么意思?返回两个列表,一个匹配一个不匹配?
-
是的 - 它不会根据物品的特征而是根据定位进行拆分。
-
@Arithmomaniac,你的意思是
Skip()和Take()? -
你能写出你的意思的foreach循环吗?