C#winform如何查找list中全部满足条件元素的索引,并且根据索引删除list中元素和另一个list中元素
时间: 2024-10-13 18:14:39 浏览: 26
C#Winform控件listbox用法实例.rar
在C# WinForms中,如果你有一个List<T>类型的列表,并想要找到所有满足特定条件的元素及其索引,然后同时从两个列表中删除它们,你可以这样做:
首先,创建一个辅助函数,用于找出满足条件的索引并返回一个元组集合,包含元素值和其索引:
```csharp
public static List<(T Element, int Index)> FindIndexes(List<T> list, Func<T, bool> condition)
{
var indexes = new List<(T, int)>();
for (int i = 0; i < list.Count; i++)
{
if (condition(list[i]))
indexes.Add((list[i], i));
}
return indexes;
}
```
接下来,定义你的条件函数,例如检查元素是否等于某个值:
```csharp
private static bool IsElementToRemove(T element, T targetToRemove)
{
// 检查元素是否等于targetToRemove
return EqualityComparer<T>.Default.Equals(element, targetToRemove);
}
```
然后,在主程序里,可以这样操作:
```csharp
List<T> mainList = ...; // 主要列表
List<T> otherList = ...; // 另一个列表
var matchingElements = FindIndexes(mainList, item => IsElementToRemove(item, someValueFromOtherList));
foreach ((T element, int index) in matchingElements)
{
mainList.RemoveAt(index); // 从mainList中删除
otherList.RemoveAt(IndexOf(otherList, element)); // 如果otherList存在对应的元素,也删除
}
// 查找删除元素的索引,这里假设otherList按索引顺序排列
private int IndexOf(List<T> list, T item)
{
return list.IndexOf(item);
}
```
注意,如果`otherList`不是有序的,你需要先找到对应元素再删除。
阅读全文