туалет gzipped файлы?

Итак, у вас есть Companies, и каждый Company имеет ноль или более Relations. Каждый Relation принадлежит ровно одному Company, используя внешний ключ CompanyId.

Ваше требование немного неясно:

Мне нужны все отношения компаний внутри компаний.

Немного неясно, что вы хотите.

Company (1) with Name "Acme" has Relations A, B, C 
Company (2) with Name "Acme" has Relations C, X, Y
Company (3) with Name "Other" has Relations D, E,
Company (4) with Name "Other" has Relations D, F,

Все отношения всех компаний в вашей последовательности компаний - это A B C D E X Y. Иными словами: все отношения, которые используются любой из компаний. Согласно вашему примеру, это не то, что вы хотите.

Вы также написали:

У меня есть последовательность компаний, в которой есть дубликаты компаний.

Очевидно, у вас есть метод, чтобы решить, являются ли две компании фактически одной и той же компанией. Это может быть имя, номер налогоплательщика или что-то еще. То, как вы решите, являются ли две компании одинаковыми, не имеет отношения к этому вопросу. Предположим, у вас есть объект класса, который реализует IEqualityComparer<Company>:

IEqualityComparer<Company> comparer = ...;

Назад к вашему требованию.

Я думаю, вы хотели сказать, что хотели Companies с их Relations. Если две компании фактически являются одной и той же компанией, вы хотите, чтобы они были возвращены как одна «Компания со своими отношениями»

Итак, в приведенном выше примере вам нужен следующий результат

  • Компания с именем «Acme» с отношениями ABCXY
  • Компания с именем «Other» с отношениями DEF

Проблема с этим требованием состоит в том, если вы считаете, что две компании равны (например, потому что они имеют одно и то же имя) что вы хотите от свойств компании, которые отличаются? Например: какой идентификатор следует использовать для компании с именем «Acme»?

Несколько решений:

  • Это не проблема, две компании равны, только если все свойства равно
  • Это не проблема, я не хочу никаких свойств компании
  • Это не проблема, я хочу только свойства компании, которые равны. Например, я хочу имя, а не идентификатор
  • Мне все равно, какую из равных компаний вы выберете

Из-за этого неполного требования ответ должен быть очень общим , Все ответы будут следующими:

  • Найти все «Компании с их отношениями»
  • Сгруппировать их по Equal Company
  • Выберите части Компании и части Связи, которые вы хочет.

Разница в четырех возможных требованиях, описанных выше, заключается в том, какие части Компании вы выбираете в конце.

Я дам решение наиболее вероятного требования:

  • Две компании равны, если они имеют одинаковое название.
  • Дайте мне названия компаний со всеми их связями

.

// "I have a List of companies and a List of their Relations"
IEnumerable<Company> companies = ...
IEnumerable<Relation> relations = ...

// I want all Companies with their Relations
var result = companies.GroupJoin(relations,  // GroupJoin Companies and Relations
    company => company.Id,                   // from each Company take the primary key
    relation => relation.CompanyId,          // from each Relation take the foreign key

    // and all Relations with matching foreign key
    (company, relationsOfThisCompany) => new
    {
        Company = company,
        Relations = relationsOfThisCompany,
    })
    // Result: a sequence of companies, each with their Relations

    .GroupBy(
       // KeySelector: make groups of companies with same Name
       joinResult => joinResult.Company.Name,


    // ResultSelector: take the Key (which is the common Name)
    // with all joinResults of companies with name equal equal to the Key to create the output
    (companyName, companiesWithThisName => new
    {
        Name = key.Name,
        Relations = companiesWithThisName.Select(company => company.Relations),
    },

    // Comparer: when are two company names equal?
    StringComparer.CurrentCultureIgnoreCase);

Поскольку у меня было довольно простое определение равенства компаний, я мог использовать уже существующий компаратор равенства, чтобы решить, равны ли две компании.

Преимущество отдельного компаратора для равенства компаний заключается в том, что если в будущем вы решите, что вам нужны другие свойства, чтобы решить, равны ли две компании, например, их налоговый номер вместо названия, этот код не изменится. , Вы сами решаете, будете ли вы использовать концепцию «равенства компаний» достаточно часто, чтобы решить, стоит ли делать специальный сравнитель равенства

11
задан pseinstein 10 May 2009 в 20:40
поделиться

1 ответ

Попробуйте этот zwc скрипт:

#! /bin/bash --
for F in "$@"; do
  echo "$(zcat -f <"$F" | wc -l) $F"
done
12
ответ дан 3 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

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