Удалите все объекты из списка, которые имеют то же значение, что и любой другой объект из другого списка. XNA - PullRequest
0 голосов
/ 08 августа 2011

У меня есть два Списка вектора2: Положение и Пол, и я пытаюсь сделать это: если Позиция совпадает с Полом, тогда удалите позицию из Списка.

Вот то, что я думалбудет работать, но это не так:

    public void GenerateFloor()
    {

        //I didn't past all, the code add vectors to the floor List, etc.
        block.Floor.Add(new Vector2(block.Texture.Width, block.Texture.Height) + RoomLocation);

        // And here is the way I thought to delete the positions:
        block.Positions.RemoveAll(FloorSafe);
    }

    private bool FloorSafe(Vector2 x)
    {
        foreach (Vector2 j in block.Floor)
        {
            return x == j;
        }

        //or
        for (int n = 0; n < block.Floor.Count; n++)
        {
            return x == block.Floor[n];
        }

    }

Я знаю, что это не очень хороший способ, так как я могу написать это?Мне нужно удалить все Позиции Вектор2, которые совпадают с любым из Векторов Этажей 2.

============================================================================== РЕДАКТИРОВАТЬ: Это работает!Для людей, которые ищут, как это сделать, вот мой окончательный код ответа Hexxagonal:

public void FloorSafe()
    {
        //Gets all the Vectors that are not equal to the Positions List.
        IEnumerable<Vector2> ReversedResult = block.Positions.Except(block.Floor);

        //Gets all the Vectors that are not equal to the result..
        //(the ones that are equal to the Positions).
        IEnumerable<Vector2> Result = block.Positions.Except(ReversedResult);

        foreach (Vector2 Positions in Result.ToList())
        {
            block.Positions.Remove(Positions); //Remove all the vectors from the List.
        }
     }

1 Ответ

2 голосов
/ 08 августа 2011

Вы можете сделать LINQ кроме.Это удалит из коллекции Positions все, чего нет в коллекциях Floor.

result = block.Positions.Except(block.Floor)
...