-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathListExtension.cs
81 lines (73 loc) · 3.22 KB
/
ListExtension.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
using System.Linq;
namespace Cnoom.UnityTool.Extensions
{
public static class ListExtensions
{
/// <summary>
/// 根据指定条件查找列表中的元素,并返回符合条件的元素列表。
/// </summary>
/// <typeparam name="T">列表中元素的类型。</typeparam>
/// <param name="list">要搜索的列表。</param>
/// <param name="condition">用于确定是否应包含元素的条件。</param>
/// <returns>符合条件的元素列表。</returns>
public static List<T> FindByCondition<T>(this List<T> list, Func<T, bool> condition)
{
return list.Where(condition).ToList();
}
/// <summary>
/// 根据指定条件移除列表中的元素。
/// </summary>
/// <typeparam name="T">列表中元素的类型。</typeparam>
/// <param name="list">要操作的列表。</param>
/// <param name="condition">用于确定是否应移除元素的条件。</param>
/// <returns>移除了符合条件元素后的新列表。</returns>
public static List<T> RemoveByCondition<T>(this List<T> list, Func<T, bool> condition)
{
// 创建一个新的列表来存储元素
List<T> listToRemove = new List<T>(list);
// 遍历原始列表中的每个元素
foreach (T item in list)
{
// 如果元素符合条件,则将其添加到移除列表中
if (condition(item))
{
listToRemove.Remove(item);
}
}
// 返回移除了符合条件元素后的新列表
return listToRemove;
}
/// <summary>
/// 根据指定条件查找列表中的单个元素,如果未找到则返回默认值。
/// </summary>
/// <typeparam name="T">列表中元素的类型。</typeparam>
/// <param name="list">要搜索的列表。</param>
/// <param name="condition">用于确定是否应包含元素的条件。</param>
/// <param name="defaultValue">如果未找到符合条件的元素,则返回此默认值。</param>
/// <returns>符合条件的单个元素,如果未找到则返回默认值。</returns>
public static T FindByConditionSingle<T>(this List<T> list, Func<T, bool> condition, T defaultValue = default)
{
T item = list.SingleOrDefault(condition);
return item == null? defaultValue : item;
}
/// <summary>
/// 从列表中随机返回一个元素。
/// </summary>
/// <typeparam name="T">列表中元素的类型。</typeparam>
/// <param name="list">要搜索的列表。</param>
/// <returns>随机选择的元素。</returns>
public static T RandomElement<T>(this List<T> list)
{
return list[UnityEngine.Random.Range(0, list.Count)];
}
/// <summary>
/// 克隆列表并返回新的列表。
/// </summary>
public static List<T> Clone<T>(this List<T> list)
{
return new List<T>(list);
}
}
}