2013-11-26 3 views
1

Предыстория проблемы:список сравнения метод с массивом

Im в настоящее время работает на следопыта. Моей последней версией была способность загружать в разные карты, а не только один массив, содержащий карту. Поэтому, прежде чем это выглядело так:

Node[] mMatrix; 

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

List<Node[]> 

Класс, узел просто содержит ИНТ объявлен как F.

А теперь к вопросу!

Чтобы быть в курсе, конкретный вопрос: как бы вы сравниваете объект типа: Список < Узел []> в классе IComparer 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; 
    } 
} 

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

+0

Вы получаете список 'Список n2 = (Список ) b;' и попробуйте получить поле 'F' из списка,' n1.F', этот 'n1' является List, а не узлом – Grundy

+0

[Пожалуйста, не помещайте теги в ваш вопрос заголовок.] (http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles) –

+1

Чтобы реализовать 'IComparer ', вам понадобится 'Compare (int, int) ', что делает ваш новый метод сравнения совершенно бесполезным. Вероятно, вам нужно работать на другом уровне; ведь как вы можете просто сравнить два списка массивов объектов? Это выглядит довольно сложной проблемой. –

ответ

0

Вы сказали, что изменили 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. Это так же просто, как может.

+0

Конечно! Теперь проблема заключается в том, как сделать поддержку Priorityqueue своего рода 2D-массивом? Держу пари, что это невозможно с использованием метода сравнения, поскольку у него есть только 2 параметра? – LamaCoder

Смежные вопросы