1 using System;
2 using System.Collections;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6
7 namespace xxWare.Common
8 {
9 public static class GenericExtension
10 {
11 #region List<T> search count
12 public static int CountAll<T>(
this List<T>
_list, T _searchobj)
13 {
14 return (
from t
in _list
where t.Equals(_searchobj)
select t).Count();
15 }
16
17 //Must be Sort before use BinarySearchCountAll
18 public static int BinarySearchCountAll<T>(
this List<T>
_list, T _searchobj)
19 {
20 int center =
_list.BinarySearch(_searchobj);
21
22 if (center >=
0)
23 {
24 int left =
center;
25
26 while (left >
0 && _list[left -
1].Equals(_searchobj))
27 {
28 left -=
1;
29 }
30
31 int right =
center;
32 while (right < (_list.Count -
1) && _list[right +
1].Equals(_searchobj))
33 {
34 right +=
1;
35 }
36
37 return (right - left) +
1;
38 }
39 else
40 {
41 return center;
42 }
43 }
44
45 public static List<T> FindAll<T>(
this List<T>
_list, T _searchobj)
46 {
47 List<T> _founditem =
new List<T>
();
48
49 foreach (
var v
in _list)
50 {
51 if (v.Equals(_searchobj))
52 {
53 _founditem.Add(v);
54 }
55 }
56
57 return _founditem;
58 }
59
60 //Must be Sort before use BinarySearchAll
61 public static List<T> BinarySearchAll<T>(
this List<T>
_list, T _searchobj)
62 {
63 List<T> _retobj =
new List<T>
();
64
65 int center =
_list.BinarySearch(_searchobj);
66
67 if (center >=
0)
68 {
69 _retobj.Add(_list[center]);
70
71 int left =
center;
72
73 while (left >
0 && _list[left -
1].Equals(_searchobj))
74 {
75 left -=
1;
76 _retobj.Add(_list[left]);
77 }
78
79 int right =
center;
80 while (right < (_list.Count -
1) && _list[right +
1].Equals(_searchobj))
81 {
82 right +=
1;
83 _retobj.Add(_list[right]);
84 }
85
86 }
87
88 return _retobj;
89
90 }
91
92 public static List<
string> SearchStringAll(
this List<
string> _list,
string _searchstr)
93 {
94 var v =
from q
in _list
95 where q.Contains(_searchstr)
96 select q;
97 return v.ToList<
string>
();
98 }
99
100 #endregion
101
102 #region IList<> Sort
103 /// <summary>
104 /// Sample:
105 /// IList<string> iList = new [] { "Carlton", "Alison", "Bob", "Eric", "David" };
106 /// // Sort in-place, by string length
107 /// iList.Sort((s1, s2) => s1.Length.CompareTo(s2.Length));
108 /// // Or use OrderBy()
109 /// IEnumerable<string> ordered = iList.OrderBy((s1, s2) => s1.Length.CompareTo(s2.Length));
110 /// </summary>
111 /// <typeparam name="T"></typeparam>
112 /// <param name="list"></param>
113 /// <param name="comparison"></param>
114 public static void Sort<T>(
this IList<T> list, Comparison<T>
comparison)
115 {
116 ArrayList.Adapter((IList)list).Sort(
new ComparisonComparer<T>
(comparison));
117 }
118 public static IEnumerable<T> OrderBy<T>(
this IEnumerable<T> list, Comparison<T>
comparison)
119 {
120 return list.OrderBy(t => t,
new ComparisonComparer<T>
(comparison));
121 }
122
123 public class ComparisonComparer<T> : IComparer<T>
, IComparer
124 {
125 private readonly Comparison<T>
_comparison;
126 public ComparisonComparer(Comparison<T> comparison) { _comparison =
comparison; }
127 public int Compare(T x, T y) {
return _comparison(x, y); }
128 public int Compare(
object o1,
object o2) {
return _comparison((T)o1, (T)o2); }
129 }
130 #endregion
131
132 }
133 }
转载于:https://www.cnblogs.com/jdxx/archive/2013/01/22/2870679.html
相关资源:asp.net知识库