сравнить список методов с массивом

Предыстория проблемы:

В настоящее время я работаю над поиском пути. Моей последней реализацией была возможность загрузки в разные файлы карт вместо использования только одного массива, содержащего карту. Итак, раньше это выглядело так:

Node[] mMatrix;

Однако, поскольку я хочу загружать разные сегменты узлов. Я сделал это:

List<Node[]>

Класс Node просто содержит int, объявленный как F.

А теперь к делу!

Короче говоря, конкретный вопрос заключается в том, как бы вы сравнили объект типа : List‹ Node[] > в методе IComparer Members Compare.

Я использовал priorityQueue для ускорения алгоритма поиска пути, но теперь у меня проблемы со сравнением этой новой «двухмерной» структуры данных. Для моей старой рабочей реализации я использовал это:

internal class ComparePFNodeMatrix : IComparer<int>
{
    //Variables Declaration
    Node[] mMatrix;

    //Constructors
    public ComparePFNodeMatrix(Node[] matrix)
    {
        mMatrix = matrix;
    }

    //IComparer Members
    public int Compare(int a, int b)
    {
        if (mMatrix[a].F > mMatrix[b].F)
            return 1;
        else if (mMatrix[a].F < mMatrix[b].F)
            return -1;
        return 0;
    }
}

Кто-нибудь знает, как сделать компаратор с новой структурой данных, которую я использую? Заранее спасибо!


person LamaCoder    schedule 26.11.2013    source источник
comment
вы получаете список List<Node[]> n2 = (List<Node[]>)b; и пытаетесь получить поле F из списка, n1.F это n1 список, а не узел   -  person Grundy    schedule 26.11.2013
comment
Не добавляйте теги в заголовок вопроса.   -  person O. R. Mapper    schedule 26.11.2013
comment
Чтобы реализовать IComparer<int>, вам нужен метод Compare(int, int), что делает ваш новый метод Compare совершенно бесполезным. Вероятно, вам нужно действовать на другом уровне; в конце концов, как можно просто сравнить два списка массивов объектов? Это похоже на довольно сложный вопрос.   -  person S_F    schedule 26.11.2013
comment
Хорошо! Большое спасибо. Есть ли у вас какие-либо рекомендации относительно того, какой подход мне следует использовать? Я, конечно, согласен с вами, что это сложный вопрос.   -  person LamaCoder    schedule 26.11.2013


Ответы (1)


Вы сказали, что изменили Node[] mMatrix; на List<Node[]> mMatrix;. Если это так,

mMatrix[a] дает вам Node[], а не Node.
Если вы хотите получить доступ к F, вы должны использовать что-то вроде:

int i = (mMatrix[a])[anotherIndex].F;

EDIT 1:
И если вы используете List<Node[]> n1 = (List<Node[]>)a;, то как вы можете получить доступ к F с помощью простого n1.F? n1 имеет тип List<Node[]>, а не Node. Это настолько просто, насколько это возможно.

person Ganesh Jadhav    schedule 26.11.2013
comment
Безусловно! Теперь проблема заключается в том, как мне заставить Priorityqueue поддерживать своего рода 2D-массив? Могу поспорить, что использовать метод сравнения невозможно, поскольку он имеет только 2 параметра? - person LamaCoder; 26.11.2013