C # извлекает набор строк для заданного ключа [duplicate]

неопределенная ссылка на WinMain@16 или аналогичную «необычную» main() ссылку на точку входа (особенно для ).

Вы возможно, пропустили, чтобы выбрать правильный тип проекта с вашей реальной IDE. IDE может захотеть связать, например. Проекты приложений Windows для такой функции точки входа (как указано в недостающей ссылке выше) вместо обычной int main(int argc, char** argv);.

Если ваша среда IDE поддерживает Plain Console Projects , вы может захотеть выбрать этот тип проекта вместо проекта приложения Windows.


Здесь case1 и case2 обрабатываются более подробно из реальный мир проблема.

6
задан ChrisO 15 November 2013 в 17:45
поделиться

2 ответа

Итак, во-первых, ваш TeamGrouping на самом деле немного сложнее, чем нужно. Все, что ему нужно, это объект Team и его последовательность для детей:

public class TeamNode
{
    public Team Value { get; set; }
    public IEnumerable<TeamNode> Children { get; set; }
}

Далее мы возьмем нашу последовательность команд и создадим узел для каждого из них. Затем мы будем использовать ToLookup, чтобы сгруппировать их по их родительскому идентификатору. (Ваше использование GroupBy довольно близко к этому, но ToLookup будет проще.) Наконец, мы можем просто установить, чтобы дети каждого узла были значением поиска для этого узла (обратите внимание, что ILookup вернет пустую последовательность если ключ не существует, поэтому наши листья будут обработаны отлично). Чтобы закончить его, мы можем вернуть все узлы верхнего уровня, просто просмотрев все узлы с родительским идентификатором null.

public static IEnumerable<TeamNode> CreateTree(IEnumerable<Team> allTeams)
{
    var allNodes = allTeams.Select(team => new TeamNode() { Value = team })
        .ToList();
    var lookup = allNodes.ToLookup(team => team.Value.ParentTeamId);
    foreach (var node in allNodes)
        node.Children = lookup[node.Value.TeamId];
    return lookup[null];
}
4
ответ дан Servy 28 August 2018 в 01:56
поделиться

Сначала вам понадобится такой объект, поэтому объект Team может быть:

public class Team
{
    public ParentId {get;set;}
    public IEnumerable<Team> ChildTeams{get;set;}
}

Затем рекурсивная функция

private IEnumerable<Team> BuildTeams(IEnumerable<Team> allTeams,
                                                  int? parentId)
    {
        var teamTree = new List<Team>();
        var childTeams = allTeams.Where(o => o.ParentId == parentId).ToList();

        foreach (var team in childTeams)
        {
            var t = new Team();
            var children = BuildTeams(allTeams, team.TeamID);
            t.ChildTeams = children;
            teamTree.Add(t);
        }

        return teamTree ;
    }

Первый вызов проходит через null для родителя и вытащить все команды с нулевым родителем :), хотя я заметил, что у ваших команд нет нулевого значения для родителя, поэтому не знаете, как вы сейчас идентифицируете верхний уровень?

1
ответ дан Daniel Dawes 28 August 2018 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: