Предыстория проблемы:
В настоящее время я работаю над поиском пути. Моей последней реализацией была возможность загрузки в разные файлы карт вместо использования только одного массива, содержащего карту. Итак, раньше это выглядело так:
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;
}
}
Кто-нибудь знает, как сделать компаратор с новой структурой данных, которую я использую? Заранее спасибо!
List<Node[]> n2 = (List<Node[]>)b;
и пытаетесь получить полеF
из списка,n1.F
этоn1
список, а не узел - person Grundy   schedule 26.11.2013IComparer<int>
, вам нужен методCompare(int, int)
, что делает ваш новый метод Compare совершенно бесполезным. Вероятно, вам нужно действовать на другом уровне; в конце концов, как можно просто сравнить два списка массивов объектов? Это похоже на довольно сложный вопрос. - person S_F   schedule 26.11.2013