C# 集合搜索
介绍
在C#编程中,集合(如 List<T>
、Dictionary<TKey, TValue>
等)是存储和操作数据的强大工具。搜索集合中的元素是常见的操作之一,无论是查找特定值、检查是否存在某个元素,还是获取满足条件的元素列表。本文将详细介绍C#中集合搜索的常用方法,并通过代码示例和实际案例帮助你掌握这些技巧。
常用搜索方法
1. Contains
方法
Contains
方法用于检查集合中是否包含特定元素。它返回一个布尔值,表示元素是否存在。
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
bool containsThree = numbers.Contains(3);
Console.WriteLine(containsThree); // 输出: True
Contains
方法适用于简单的值类型(如 int
、string
等),但对于复杂对象,需要确保对象实现了 IEquatable<T>
接口或重写了 Equals
和 GetHashCode
方法。
2. Find
方法
Find
方法用于查找集合中第一个满足指定条件的元素。它接受一个 Predicate<T>
委托作为参数。
List<string> fruits = new List<string> { "Apple", "Banana", "Cherry" };
string result = fruits.Find(fruit => fruit.StartsWith("B"));
Console.WriteLine(result); // 输出: Banana
Find
方法返回第一个匹配的元素。如果没有找到匹配的元素,则返回默认值(对于引用类型为 null
,对于值类型为 default(T)
)。
3. FindAll
方法
FindAll
方法用于查找集合中所有满足指定条件的元素,并返回一个新的列表。
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
List<int> evenNumbers = numbers.FindAll(number => number % 2 == 0);
Console.WriteLine(string.Join(", ", evenNumbers)); // 输出: 2, 4
4. IndexOf
方法
IndexOf
方法用于查找集合中某个元素的索引。如果元素不存在,则返回 -1
。
List<string> colors = new List<string> { "Red", "Green", "Blue" };
int index = colors.IndexOf("Green");
Console.WriteLine(index); // 输出: 1
IndexOf
方法只能查找第一个匹配的元素。如果需要查找所有匹配的元素,可以使用 FindAll
方法。
5. BinarySearch
方法
BinarySearch
方法用于在已排序的集合中执行二分查找。它返回元素的索引,如果元素不存在,则返回一个负数。
List<int> sortedNumbers = new List<int> { 1, 2, 3, 4, 5 };
int index = sortedNumbers.BinarySearch(3);
Console.WriteLine(index); // 输出: 2
BinarySearch
方法要求集合必须是已排序的,否则结果可能不正确。
实际案例
案例1:搜索用户列表
假设我们有一个用户列表,每个用户包含 Id
和 Name
属性。我们需要查找特定 Id
的用户。
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
List<User> users = new List<User>
{
new User { Id = 1, Name = "Alice" },
new User { Id = 2, Name = "Bob" },
new User { Id = 3, Name = "Charlie" }
};
User user = users.Find(u => u.Id == 2);
Console.WriteLine(user.Name); // 输出: Bob
案例2:查找所有符合条件的订单
假设我们有一个订单列表,每个订单包含 OrderId
和 Amount
属性。我们需要查找所有金额大于100的订单。
public class Order
{
public int OrderId { get; set; }
public decimal Amount { get; set; }
}
List<Order> orders = new List<Order>
{
new Order { OrderId = 1, Amount = 50 },
new Order { OrderId = 2, Amount = 150 },
new Order { OrderId = 3, Amount = 200 }
};
List<Order> highValueOrders = orders.FindAll(o => o.Amount > 100);
foreach (var order in highValueOrders)
{
Console.WriteLine($"OrderId: {order.OrderId}, Amount: {order.Amount}");
}
// 输出:
// OrderId: 2, Amount: 150
// OrderId: 3, Amount: 200
总结
在C#中,集合搜索是一个常见且重要的操作。通过使用 Contains
、Find
、FindAll
、IndexOf
和 BinarySearch
等方法,你可以轻松地在集合中查找元素。根据具体的需求选择合适的搜索方法,可以提高代码的效率和可读性。
附加资源与练习
- 练习1:创建一个包含学生信息的列表,每个学生包含
Id
和Name
属性。编写代码查找特定Id
的学生。 - 练习2:创建一个包含产品信息的列表,每个产品包含
ProductId
和Price
属性。编写代码查找所有价格低于50的产品。
通过不断练习,你将更加熟练地掌握C#集合搜索的技巧。