(Я сделал максимально возможный поиск на основе ключевых слов «removeall where» или «removeall two argument predicate» без большой удачи, поэтому здесь идет)C# List removeall принимает два аргумента в предикате?
Проблема У меня есть список объектов (класса Wave) и функцию отношения как: частный bool AinB (Wave A, Wave B), возвращающий true, если A 'находится в B. Также AinB (x, y) является истинным, гарантируя, что AinB (y, x) является ложным ,
Каков наилучший способ удалить все объекты в списке, где объекты находятся в «другом объекте в списке? то есть после удаления список должен содержать только объекты, где ни один из них не находится в отношении «находится в» с каким-либо другим объектом в списке?
в идеале это может быть сделано легко, как
listX.RemoveAll ((х, у) => AINB (х, у)), но, конечно, это не является законным в C#, также нет простого способа укажите, для удаления, x или y.
Я думал о пробегает по списку с индексом
int i = listX.Count - 1;
while (i>=0)
{
int r = listX.RemoveAll(X => AinB(X, listX[i]));
i = i - r - 1;
}
Это, кажется, работает, но мне интересно, если есть лучший способ с прямым кодом Linq, чтобы решить эту проблему. Спасибо.
От звуков его, вы будете строить дерево, это правильно? Я делаю предположение в своем ответе, что AinB изучает узлы дерева и определяет, является ли 'A' дочерним элементом' B'. – Mgetz
Нет, это довольно сложно, и этот «фильтр» является лишь одним из «отношений», но доминирующим для фильтрации большинства объектов. –