1: public static IEnumerable<IEnumerable<T>>
2: Spliter<T>(this IEnumerable<T> source, Predicate<T> predicate)
3: {
4: List<T> list = new List<T>();
5: foreach (var x in source)
6: {
7: if (predicate(x))
8: {
9: yield return list;
10: list = new List<T>();
11: continue;
12: }
13:
14: list.Add(x);
15: }
16:
17: if (list.Count > 0)
18: yield return list;
19: }
the whole codes are here:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5:
6: namespace ConsoleApplication1
7: {
8: class Program
9: {
10: static void Main(string[] args)
11: {
12: testInt();
13: testString();
14:
15: Console.ReadLine();
16: }
17:
18: static void testString()
19: {
20: string[] x = new string[]
21: {
22: "rregr ",
23: "rg regreg",
24: "",
25: "gegerg",
26: "",
27: "cvbbhbgb",
28: "rregregreg",
29: "",
30: "gregregre",
31: "gytjytj",
32: "jrhrth",
33: "htrhrth",
34: "",
35: "hthtrhrth",
36: "hrthrthrth",
37: "hrthtrh",
38: "",
39: "hrthrthrthrth",
40: ""
41: };
42:
43: foreach (var z in x.Spliter(s => s.Length == 0))
44: {
45: foreach (var q in z)
46: Console.Write(string.Format("{0},", q));
47: Console.WriteLine();
48: }
49:
50: }
51:
52: static void testInt()
53: {
54: int[] x = new int[] { 0, 2, 3,
55: 45, 9, 5, 6, 7, 0, 3, 2,
56: 5, 0, 3, 4 };
57: foreach (var z in x.Spliter(s => s == 0))
58: {
59: foreach (var q in z)
60: Console.Write(string.Format("{0} ", q));
61: Console.WriteLine();
62: }
63:
64: }
65: }
66:
67: public static class Helper
68: {
69: public static IEnumerable<IEnumerable<T>>
70: Spliter<T>(this IEnumerable<T> source, Predicate<T> predicate)
71: {
72: List<T> list = new List<T>();
73: foreach (var x in source)
74: {
75: if (predicate(x))
76: {
77: yield return list;
78: list = new List<T>();
79: continue;
80: }
81:
82: list.Add(x);
83: }
84:
85: if (list.Count > 0)
86: yield return list;
87: }
88: }
89: }
see, it's pretty easy and beautiful and fast