3
3
using System . Collections . Generic ;
4
4
using System . Linq ;
5
5
using System . Runtime . CompilerServices ;
6
- using System . Text ;
7
- using System . Threading . Tasks ;
8
6
9
7
namespace LibSugar ;
10
8
@@ -17,6 +15,7 @@ public static partial class Sugar
17
15
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
18
16
public static IEnumerable < T > Repeat < T > ( this T v , int count ) => Enumerable . Repeat ( v , count ) ;
19
17
18
+
20
19
public static string JoinStr < T > ( this IEnumerable < T > iter ) => string . Join ( ", " , iter ) ;
21
20
public static string JoinStr < T > ( this IEnumerable < T > iter , char separator ) => string . Join ( separator , iter ) ;
22
21
public static string JoinStr < T > ( this IEnumerable < T > iter , string separator ) => string . Join ( separator , iter ) ;
@@ -27,10 +26,12 @@ public static partial class Sugar
27
26
public static string JoinStr ( this string [ ] arr , char separator ) => string . Join ( separator , arr ) ;
28
27
public static string JoinStr ( this string [ ] arr , string separator ) => string . Join ( separator , arr ) ;
29
28
29
+
30
30
public static IEnumerable < ( T a , int i ) > Indexed < T > ( this IEnumerable < T > iter ) => iter . Select ( ( a , b ) => ( a , b ) ) ;
31
31
32
32
public static ParallelQuery < ( T a , int i ) > Indexed < T > ( this ParallelQuery < T > iter ) => iter . Select ( ( a , b ) => ( a , b ) ) ;
33
33
34
+
34
35
public static IEnumerable < R > WhereSelect < T , R > ( this IEnumerable < T > iter , Func < T , Option < R > > f )
35
36
=> iter . Select ( f ) . Where ( a => a . Has ) . Select ( a => a . Value ) ;
36
37
@@ -51,6 +52,7 @@ public static IEnumerable<R> WhereCast<R>(this IEnumerable iter)
51
52
public static ParallelQuery < R > WhereCast < T , R > ( this ParallelQuery < T > iter )
52
53
=> iter . Where ( a => a is R ) . Cast < R > ( ) ;
53
54
55
+
54
56
/// <summary>ForEach for <see cref="IEnumerable<T>"/></summary>
55
57
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
56
58
public static void ForEach < T > ( this IEnumerable < T > iter , Action < T > f )
@@ -91,4 +93,112 @@ public static Option<R> ForEach<T, R>(this IEnumerable<T> iter, Func<T, Option<R
91
93
}
92
94
return new ( ) ;
93
95
}
96
+
97
+ #region IEnumerable ByX
98
+
99
+ #if ! NET6_0_OR_GREATER
100
+
101
+ public static IEnumerable < T > DistinctBy < T , D > ( this IEnumerable < T > iter , Func < T , D > f )
102
+ => iter . Distinct ( EqBy ( f ) ) ;
103
+
104
+ public static IEnumerable < T > DistinctBy < T , D > ( this IEnumerable < T > iter , IEqualityComparer < D > equality , Func < T , D > f )
105
+ => iter . Distinct ( EqBy ( f , equality ) ) ;
106
+
107
+ public static IEnumerable < T > DistinctBy < T , D > ( this IEnumerable < T > iter , Func < T , D > f , IEqualityComparer < D > equality )
108
+ => iter . Distinct ( EqBy ( f , equality ) ) ;
109
+
110
+
111
+ public static IEnumerable < T > UnionBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , Func < T , D > f )
112
+ => iter . Union ( other , EqBy ( f ) ) ;
113
+
114
+ public static IEnumerable < T > UnionBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , IEqualityComparer < D > equality , Func < T , D > f )
115
+ => iter . Union ( other , EqBy ( f , equality ) ) ;
116
+
117
+ public static IEnumerable < T > UnionBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , Func < T , D > f , IEqualityComparer < D > equality )
118
+ => iter . Union ( other , EqBy ( f , equality ) ) ;
119
+
120
+ #else
121
+
122
+ public static IEnumerable < T > DistinctBy < T , D > ( this IEnumerable < T > iter , IEqualityComparer < D > equality , Func < T , D > f )
123
+ => iter . DistinctBy ( f , equality ) ;
124
+
125
+
126
+ public static IEnumerable < T > ExceptBy < T , D > ( this IEnumerable < T > iter , IEnumerable < D > other , IEqualityComparer < D > equality , Func < T , D > f )
127
+ => iter . ExceptBy ( other , f , equality ) ;
128
+
129
+
130
+ public static IEnumerable < T > IntersectBy < T , D > ( this IEnumerable < T > iter , IEnumerable < D > other , IEqualityComparer < D > equality , Func < T , D > f )
131
+ => iter . IntersectBy ( other , f , equality ) ;
132
+
133
+
134
+ public static IEnumerable < T > UnionBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , IEqualityComparer < D > equality , Func < T , D > f )
135
+ => iter . UnionBy ( other , f , equality ) ;
136
+
137
+ #endif
138
+
139
+ public static IEnumerable < T > ExceptBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , Func < T , D > f )
140
+ => iter . Except ( other , EqBy ( f ) ) ;
141
+
142
+ public static IEnumerable < T > ExceptBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , IEqualityComparer < D > equality , Func < T , D > f )
143
+ => iter . Except ( other , EqBy ( f , equality ) ) ;
144
+
145
+ public static IEnumerable < T > ExceptBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , Func < T , D > f , IEqualityComparer < D > equality )
146
+ => iter . Except ( other , EqBy ( f , equality ) ) ;
147
+
148
+
149
+ public static IEnumerable < T > IntersectBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , Func < T , D > f )
150
+ => iter . Intersect ( other , EqBy ( f ) ) ;
151
+
152
+ public static IEnumerable < T > IntersectBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , IEqualityComparer < D > equality , Func < T , D > f )
153
+ => iter . Intersect ( other , EqBy ( f , equality ) ) ;
154
+
155
+ public static IEnumerable < T > IntersectBy < T , D > ( this IEnumerable < T > iter , IEnumerable < T > other , Func < T , D > f , IEqualityComparer < D > equality )
156
+ => iter . Intersect ( other , EqBy ( f , equality ) ) ;
157
+
158
+ #endregion
159
+
160
+
161
+ #region ParallelQuery ByX
162
+
163
+ public static ParallelQuery < T > DistinctBy < T , D > ( this ParallelQuery < T > iter , Func < T , D > f )
164
+ => iter . Distinct ( EqBy ( f ) ) ;
165
+
166
+ public static ParallelQuery < T > DistinctBy < T , D > ( this ParallelQuery < T > iter , IEqualityComparer < D > equality , Func < T , D > f )
167
+ => iter . Distinct ( EqBy ( f , equality ) ) ;
168
+
169
+ public static ParallelQuery < T > DistinctBy < T , D > ( this ParallelQuery < T > iter , Func < T , D > f , IEqualityComparer < D > equality )
170
+ => iter . Distinct ( EqBy ( f , equality ) ) ;
171
+
172
+
173
+ public static ParallelQuery < T > ExceptBy < T , D > ( this ParallelQuery < T > iter , ParallelQuery < T > other , Func < T , D > f )
174
+ => iter . Except ( other , EqBy ( f ) ) ;
175
+
176
+ public static ParallelQuery < T > ExceptBy < T , D > ( this ParallelQuery < T > iter , ParallelQuery < T > other , IEqualityComparer < D > equality , Func < T , D > f )
177
+ => iter . Except ( other , EqBy ( f , equality ) ) ;
178
+
179
+ public static ParallelQuery < T > ExceptBy < T , D > ( this ParallelQuery < T > iter , ParallelQuery < T > other , Func < T , D > f , IEqualityComparer < D > equality )
180
+ => iter . Except ( other , EqBy ( f , equality ) ) ;
181
+
182
+
183
+ public static ParallelQuery < T > IntersectBy < T , D > ( this ParallelQuery < T > iter , ParallelQuery < T > other , Func < T , D > f )
184
+ => iter . Intersect ( other , EqBy ( f ) ) ;
185
+
186
+ public static ParallelQuery < T > IntersectBy < T , D > ( this ParallelQuery < T > iter , ParallelQuery < T > other , IEqualityComparer < D > equality , Func < T , D > f )
187
+ => iter . Intersect ( other , EqBy ( f , equality ) ) ;
188
+
189
+ public static ParallelQuery < T > IntersectBy < T , D > ( this ParallelQuery < T > iter , ParallelQuery < T > other , Func < T , D > f , IEqualityComparer < D > equality )
190
+ => iter . Intersect ( other , EqBy ( f , equality ) ) ;
191
+
192
+
193
+ public static ParallelQuery < T > UnionBy < T , D > ( this ParallelQuery < T > iter , ParallelQuery < T > other , Func < T , D > f )
194
+ => iter . Union ( other , EqBy ( f ) ) ;
195
+
196
+ public static ParallelQuery < T > UnionBy < T , D > ( this ParallelQuery < T > iter , ParallelQuery < T > other , IEqualityComparer < D > equality , Func < T , D > f )
197
+ => iter . Union ( other , EqBy ( f , equality ) ) ;
198
+
199
+ public static ParallelQuery < T > UnionBy < T , D > ( this ParallelQuery < T > iter , ParallelQuery < T > other , Func < T , D > f , IEqualityComparer < D > equality )
200
+ => iter . Union ( other , EqBy ( f , equality ) ) ;
201
+
202
+ #endregion
203
+
94
204
}
0 commit comments