У меня есть следующие 5 строк строки:Проблемы с алгоритмом
A.B.C.D.E
A.B
A.B.C
A
A.B.C.D
Это иерархические отношения. Вторая строка, например, означает, что B является дочерним по отношению к A.
Теперь я хочу проанализировать эти строки в структуре классов. Чтобы каждая буква была представлена экземпляром класса и указывала на его родительский элемент (или null, если верхний уровень (A)). Однако каждая буква должна быть добавлена только один раз.
Я начал следующее:
String[] hierarchical = Name.Split('.');
if (hierarchical.Count() > 1)
{
Console.WriteLine("Package '" + Name + "' is not top level and has to be parsed");
Console.WriteLine("Find parent for '" + hierarchical[hierarchical.Count() - 1] + "'");
findParent(Name);
}
else
{
Console.WriteLine("Package '" + Name + "' is top level and is added to the manager");
if (!manager.isAlreadyAdded(Name))
{
Package p = new Package(null, hierarchical[0], Name);
manager.add(p);
}
}
}
Это означает, что, если это имя верхнего уровня (А в приведенном выше примере), а затем добавить его к менеджеру, если он уже не существует. Проблема заключается в методе findParent(), где я пытаюсь найти родителя субпакет:
private void findParent(String path)
{
String originalPath = path;
bool found = false;
while (!found)
{
int position = path.LastIndexOf(".");
if (position == -1)
{
Console.WriteLine("Top level reached: " + path);
if (!manager.isAlreadyAdded(path))
{
Package p = new Package(null, path, path);
manager.add(p);
}
found = true;
}
else
{
path = path.Substring(0, position);
Console.WriteLine("Path: " + path);
if (!manager.isAlreadyAdded(path))
{
Package p = new Package(null,getName(path), path);
manager.add(p);
}
}
}
}
private string getName(string path)
{
int position = path.LastIndexOf(".");
if (position == -1)
{
return path;
}
else
{
return path.Substring(position+1, path.Length - position - 1);
}
}
Как и ожидалось, это работает не так как я хотел, так как он добавляет все пакеты в качестве верхних уровней. Как я могу это исправить?
Ваш пример описывает только 1 структуру с 5 членов. Или вы имеете в виду (независимую) структуру на строку? – 2010-12-02 21:05:37
Прошу прощения, я объяснил это. Одна строка - одна структура. – 2010-12-02 21:06:54