Skip to content

Commit 46d5815

Browse files
committed
resolved #196
1 parent e0ba8ab commit 46d5815

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

src/CatLib.Core.Tests/Support/Util/ArrTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,18 @@ public void TestFilter()
391391
Assert.AreEqual(5, result.Length);
392392
}
393393

394+
[TestMethod]
395+
public void TestFilterExpected()
396+
{
397+
var result = Arr.Filter(new[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, (i) => i % 2 == 0, false);
398+
Assert.AreEqual(1, result[0]);
399+
Assert.AreEqual(3, result[1]);
400+
Assert.AreEqual(5, result[2]);
401+
Assert.AreEqual(7, result[3]);
402+
Assert.AreEqual(9, result[4]);
403+
Assert.AreEqual(5, result.Length);
404+
}
405+
394406
[TestMethod]
395407
public void TestFilterIEnumerable()
396408
{

src/CatLib.Core/Support/Util/Arr.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -312,13 +312,14 @@ public static T[] Remove<T>(ref T[] source, Predicate<T> predicate)
312312
}
313313

314314
/// <summary>
315-
/// 输入数组中的每个值传给回调函数,如果回调函数返回 true,则把输入数组中的当前值加入结果数组中
315+
/// 输入数组中的每个值传给回调函数,如果回调函数和期望值(<paramref name="expected"/>)相等,则把输入数组中的当前值加入结果数组中
316316
/// </summary>
317317
/// <typeparam name="T">数组类型</typeparam>
318318
/// <param name="source">规定数组</param>
319319
/// <param name="predicate">回调函数</param>
320+
/// <param name="expected">回调函数的期望值</param>
320321
/// <returns>需求数组</returns>
321-
public static T[] Filter<T>(T[] source, Predicate<T> predicate)
322+
public static T[] Filter<T>(T[] source, Predicate<T> predicate, bool expected = true)
322323
{
323324
Guard.Requires<ArgumentNullException>(source != null);
324325
Guard.Requires<ArgumentNullException>(predicate != null);
@@ -327,7 +328,7 @@ public static T[] Filter<T>(T[] source, Predicate<T> predicate)
327328
var i = 0;
328329
foreach (var result in source)
329330
{
330-
if (predicate.Invoke(result))
331+
if (predicate.Invoke(result) == expected)
331332
{
332333
elements[i++] = result;
333334
}
@@ -338,21 +339,22 @@ public static T[] Filter<T>(T[] source, Predicate<T> predicate)
338339
}
339340

340341
/// <summary>
341-
/// 将规定迭代器中的每个值传给回调函数,如果回调函数返回 true,则把规定迭代器中的当前值加入结果数组中
342+
/// 将规定迭代器中的每个值传给回调函数,如果回调函数和期望值(<paramref name="expected"/>)相等,则把规定迭代器中的当前值加入结果数组中
342343
/// </summary>
343344
/// <typeparam name="T">数组类型</typeparam>
344345
/// <param name="source">规定迭代器</param>
345346
/// <param name="predicate">回调函数</param>
347+
/// <param name="expected">回调函数的期望值</param>
346348
/// <returns>需求数组</returns>
347-
public static T[] Filter<T>(IEnumerable<T> source, Predicate<T> predicate)
349+
public static T[] Filter<T>(IEnumerable<T> source, Predicate<T> predicate, bool expected = true)
348350
{
349351
Guard.Requires<ArgumentNullException>(source != null);
350352
Guard.Requires<ArgumentNullException>(predicate != null);
351353

352354
var results = new List<T>();
353355
foreach (var result in source)
354356
{
355-
if (predicate.Invoke(result))
357+
if (predicate.Invoke(result) == expected)
356358
{
357359
results.Add(result);
358360
}

0 commit comments

Comments
 (0)