Хорошо Haskell только в 1.8 раза медленнее, чем C++ GCC, который быстрее, чем реализация GCC C для типичных задач сравнительного теста. Это делает Haskell очень быстро, еще быстрее, чем C# (Моно, который является).
относительная скорость Языка
Для записи я использую Lua для Игр на iPhone, таким образом Вы могли легко использовать Haskell или Lisp, если Вы предпочитаете, так как они быстрее.
В настоящее время вы не показали ничего, что фактически добавляло бы одну категорию в список ... Я предполагаю, что при повторении вы хотите добавить результаты Get (categoryId)
также ·
Решение Прита, безусловно, будет работать, но здесь ' s альтернатива, которая позволяет избежать создания всех дополнительных списков:
public List<Category> GetAllChildCats(int categoryId)
{
List<Category> ret = new List<Category>();
GetAllChildCats(categoryId, ret);
return ret;
}
private void GetAllChildCats(int categoryId, List<Category> list)
{
Category c = Get(categoryid);
list.Add(c);
foreach(Category cat in c.ChildCategories)
{
GetAllChildCats(cat.CategoryID, list);
}
}
Это создает единый список и добавляет в него элементы по мере его выполнения.
Один момент - если у вас уже есть дочерняя Категория
объектов, вам действительно нужно снова вызвать Get
? Каждый дочерний элемент содержит только свой идентификатор, пока вы не получите всю категорию?
foreach(Category cat in c.ChildCategories)
{
list.AddRange( GetAllChildCats(cat.CategoryID) )
}
и не забывайте
return list;
Я думаю, что эта версия linq позволит вам избежать накладных расходов на создание списка:
public IEnumerable<Category> GetAllChildCats(int categoryid)
{
Category c = Get(categoryid);
return new[] { c }.Concat(c.ChildCategories.SelectMany(cat => GetAllChildCats(cat)));
}
Вы всегда можете вызвать ToList () для возвращенного IEnumerable, если вам это нужно.