Skip to content

Commit 5ea0591

Browse files
committed
refactor(extensions): 重命名集合扩展方法并优化 RemoveIf
- Random 重命名为 RandomElement,避免与 System.Random 命名冲突 - Upset 重命名为 Shuffle,使用更直观的命名 - RemoveIf 使用 RemoveAll 替代循环查找,提升性能
1 parent 638ca2c commit 5ea0591

3 files changed

Lines changed: 24 additions & 30 deletions

File tree

GameFrameX.Foundation.Extensions/CollectionExtensions.cs

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -158,15 +158,15 @@ public static int RemoveIf<TKey, TValue>(this Dictionary<TKey, TValue> self, Fun
158158
#region List<T>
159159

160160
/// <summary>
161-
/// 从列表中随机获取一个对象
161+
/// 从列表中随机获取一个元素
162162
/// </summary>
163163
/// <typeparam name="T">列表元素的类型。</typeparam>
164164
/// <param name="list">要随机的列表,不能为 null 且不能为空。</param>
165165
/// <returns>随机选择的列表元素。</returns>
166166
/// <exception cref="ArgumentNullException">当 <paramref name="list"/> 为 null 时抛出</exception>
167167
/// <exception cref="ArgumentException">当 <paramref name="list"/> 为空时抛出</exception>
168168
/// <remarks>使用System.Random.Shared来生成随机数,确保线程安全。</remarks>
169-
public static T Random<T>(this List<T> list)
169+
public static T RandomElement<T>(this List<T> list)
170170
{
171171
ArgumentNullException.ThrowIfNull(list, nameof(list));
172172
if (list.Count == 0)
@@ -188,7 +188,7 @@ public static T Random<T>(this List<T> list)
188188
/// <returns>从列表中随机选择的元素。</returns>
189189
/// <exception cref="ArgumentNullException">当 <paramref name="list"/> 或 <paramref name="random"/> 为 null 时抛出</exception>
190190
/// <exception cref="ArgumentException">当 <paramref name="list"/> 为空时抛出</exception>
191-
public static T Random<T>(this List<T> list, Random random)
191+
public static T RandomElement<T>(this List<T> list, Random random)
192192
{
193193
ArgumentNullException.ThrowIfNull(list, nameof(list));
194194
ArgumentNullException.ThrowIfNull(random, nameof(random));
@@ -202,7 +202,7 @@ public static T Random<T>(this List<T> list, Random random)
202202
}
203203

204204
/// <summary>
205-
/// 打乱列表中的元素顺序。
205+
/// 打乱列表中的元素顺序(洗牌)
206206
/// </summary>
207207
/// <typeparam name="T">列表元素的类型。</typeparam>
208208
/// <param name="list">要打乱顺序的列表,不能为 null。</param>
@@ -211,7 +211,7 @@ public static T Random<T>(this List<T> list, Random random)
211211
/// 使用Fisher-Yates洗牌算法实现列表随机排序。
212212
/// 该方法会直接修改原列表的顺序。
213213
/// </remarks>
214-
public static void Upset<T>(this List<T> list)
214+
public static void Shuffle<T>(this List<T> list)
215215
{
216216
ArgumentNullException.ThrowIfNull(list, nameof(list));
217217

@@ -224,27 +224,21 @@ public static void Upset<T>(this List<T> list)
224224
}
225225

226226
/// <summary>
227-
/// 从列表中移除满足条件的元素
227+
/// 从列表中移除满足条件的所有元素
228228
/// </summary>
229229
/// <typeparam name="T">列表元素的类型。</typeparam>
230230
/// <param name="list">要操作的列表,不能为 null。</param>
231231
/// <param name="condition">用于判断元素是否满足移除条件的委托,返回true表示需要移除,不能为 null。</param>
232232
/// <exception cref="ArgumentNullException">当 <paramref name="list"/> 或 <paramref name="condition"/> 为 null 时抛出</exception>
233233
/// <remarks>
234-
/// 此方法会重复查找并移除所有满足条件的元素,直到列表中不再存在满足条件的元素为止。
235-
/// 注意:如果列表中有多个元素满足条件,会从前往后逐个移除。
234+
/// 此方法使用 List{T}.RemoveAll 方法一次性移除所有满足条件的元素。
236235
/// </remarks>
237236
public static void RemoveIf<T>(this List<T> list, Predicate<T> condition)
238237
{
239238
ArgumentNullException.ThrowIfNull(list, nameof(list));
240239
ArgumentNullException.ThrowIfNull(condition, nameof(condition));
241240

242-
var idx = list.FindIndex(condition);
243-
while (idx >= 0)
244-
{
245-
list.RemoveAt(idx);
246-
idx = list.FindIndex(condition);
247-
}
241+
list.RemoveAll(condition);
248242
}
249243

250244
#endregion

GameFrameX.Foundation.Tests/Extensions/CollectionExtensionsTests.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -279,64 +279,64 @@ public void RemoveIf_Dictionary_ValidParameters_ShouldRemoveMatchingItems()
279279

280280
#endregion
281281

282-
#region Random Tests
282+
#region RandomElement Tests
283283

284284
[Fact]
285-
public void Random_NullList_ShouldThrowArgumentNullException()
285+
public void RandomElement_NullList_ShouldThrowArgumentNullException()
286286
{
287287
// Arrange
288288
List<string> list = null;
289289

290290
// Act & Assert
291-
Assert.Throws<ArgumentNullException>(() => list.Random());
291+
Assert.Throws<ArgumentNullException>(() => list.RandomElement());
292292
}
293293

294294
[Fact]
295-
public void Random_EmptyList_ShouldThrowArgumentException()
295+
public void RandomElement_EmptyList_ShouldThrowArgumentException()
296296
{
297297
// Arrange
298298
var list = new List<string>();
299299

300300
// Act & Assert
301-
Assert.Throws<ArgumentException>(() => list.Random());
301+
Assert.Throws<ArgumentException>(() => list.RandomElement());
302302
}
303303

304304
[Fact]
305-
public void Random_ValidList_ShouldReturnItem()
305+
public void RandomElement_ValidList_ShouldReturnItem()
306306
{
307307
// Arrange
308308
var list = new List<string> { "item1", "item2", "item3" };
309309

310310
// Act
311-
var result = list.Random();
311+
var result = list.RandomElement();
312312

313313
// Assert
314314
Assert.Contains(result, list);
315315
}
316316

317317
#endregion
318318

319-
#region Upset Tests
319+
#region Shuffle Tests
320320

321321
[Fact]
322-
public void Upset_NullList_ShouldThrowArgumentNullException()
322+
public void Shuffle_NullList_ShouldThrowArgumentNullException()
323323
{
324324
// Arrange
325325
List<string> list = null;
326326

327327
// Act & Assert
328-
Assert.Throws<ArgumentNullException>(() => list.Upset());
328+
Assert.Throws<ArgumentNullException>(() => list.Shuffle());
329329
}
330330

331331
[Fact]
332-
public void Upset_ValidList_ShouldNotThrow()
332+
public void Shuffle_ValidList_ShouldNotThrow()
333333
{
334334
// Arrange
335335
var list = new List<string> { "item1", "item2", "item3" };
336336
var originalItems = new List<string>(list);
337337

338338
// Act
339-
list.Upset();
339+
list.Shuffle();
340340

341341
// Assert
342342
Assert.Equal(originalItems.Count, list.Count);
@@ -347,13 +347,13 @@ public void Upset_ValidList_ShouldNotThrow()
347347
}
348348

349349
[Fact]
350-
public void Upset_EmptyList_ShouldNotThrow()
350+
public void Shuffle_EmptyList_ShouldNotThrow()
351351
{
352352
// Arrange
353353
var list = new List<string>();
354354

355355
// Act & Assert
356-
list.Upset(); // Should not throw
356+
list.Shuffle(); // Should not throw
357357
Assert.Empty(list);
358358
}
359359

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ string decrypted = AesHelper.Decrypt(encrypted, "your-key");
7474

7575
// 扩展方法使用
7676
var list = new List<int> { 1, 2, 3, 4, 5 };
77-
var randomItem = list.Random(); // 随机获取元素
77+
var randomItem = list.RandomElement(); // 随机获取元素
7878
var isNullOrEmpty = myString.IsNullOrEmpty(); // 字符串检查
7979
8080
// 字符串扩展
@@ -157,7 +157,7 @@ using GameFrameX.Foundation.Extensions;
157157

158158
// 集合操作
159159
var list = new List<int> { 1, 2, 3, 4, 5 };
160-
var randomItem = list.Random(); // 随机获取元素
160+
var randomItem = list.RandomElement(); // 随机获取元素
161161
var isEmpty = list.IsNullOrEmpty(); // 检查是否为空
162162
163163
// 字典扩展

0 commit comments

Comments
 (0)