Мне кажется, я слишком долго смотрел на это.У меня есть некоторые данные, которые выглядят так:
@a = (
{ name => 'ethan', depth => 0 },
{ name => 'victoria', depth => 1 },
{ name => 'stephen', depth => 2 },
{ name => 'christopher', depth => 3 },
{ name => 'isabella', depth => 2 },
{ name => 'ethan', depth => 3 },
{ name => 'emma', depth => 0 },
{ name => 'michael', depth => 1 },
{ name => 'olivia', depth => 2 },
{ name => 'alexander', depth => 3 },
{ name => 'stephen', depth => 1 },
{ name => 'sophia', depth => 0 },
{ name => 'michael', depth => 1 },
{ name => 'ava', depth => 1 },
{ name => 'joshua', depth => 2 }
);
Это простая «древовидная» структура данных.Каждый раз, когда «глубина» = 0, это начало нового «дерева».Что я хотел бы знать, так это то, во скольких из этих деревьев появляется каждое из названий?Желаемым результатом будет один хеш с именами в качестве ключа и подсчетом в качестве значения.
Изюминка в этом, если вы посмотрите внимательно, первое дерево дважды содержит имя 'ethan'.Любое дерево может иметь любое имя более одного раза, но это должно считаться только как 1, так как все они встречаются в одном и том же дереве.Тем не менее, у «Майкла» было бы число 2, поскольку он появляется в двух разных деревьях.
Я могу придумать несколько способов сделать это, но все они включают в себя несколько циклов и кажутся грубой силой и не элегантными.,Надеюсь, кто-то еще может найти лучшее решение.