LINQ - Full Outer Join

Почему Вы пытаетесь получить версию модуля? Вам нужно это из программы, Вам просто нужно число для передачи другой операции, или Вы просто пытаетесь узнать то, что Вы имеете?

мне встроили это в cpan (который идет с жемчугом) с эти -D переключатель, таким образом, Вы видите версию, которую Вы установили и текущая версия на CPAN:

$ cpan -D Text::CSV_XS

Text::CSV_XS
-------------------------------------------------------------------------
        Fast 8bit clean version of Text::CSV
        H/HM/HMBRAND/Text-CSV_XS-0.54.tgz
        /usr/local/lib/perl5/site_perl/5.8.8/darwin-2level/Text/CSV_XS.pm
        Installed: 0.32
        CPAN:      0.54  Not up to date
        H.Merijn Brand (HMBRAND)
        h.m.brand@xs4all.nl

, Если Вы хотите видеть все устаревшие модули, используйте -O (капитал O) переключатель:

$ cpan -O
Module Name                                Local    CPAN
-------------------------------------------------------------------------
Apache::DB                                0.1300  0.1400
Apache::SOAP                              0.0000  0.7100
Apache::Session                           1.8300  1.8700
Apache::SizeLimit                         0.0300  0.9100
Apache::XMLRPC::Lite                      0.0000  0.7100
... and so on

, Если Вы хотите видеть это для всех модулей, Вы установили, попробуйте эти -a переключатель для создания автопакета.

184
задан casperOne 30 March 2011 в 07:49
поделиться

1 ответ

Я думаю, что пункт соединения LINQ не является правильным решением этой проблемы из-за пункта соединения, цель не состоит в том, чтобы накопить данные таким способом как требуется к этому решению для задачи. Код для слияния созданных отдельных наборов становится слишком сложным, возможно, он хорошо для изучения целей, но не для реальных приложений. Один из путей, как решить эту проблему, находится в коде ниже:

class Program
{
    static void Main(string[] args)
    {
        List<FirstName> firstNames = new List<FirstName>();
        firstNames.Add(new FirstName { ID = 1, Name = "John" });
        firstNames.Add(new FirstName { ID = 2, Name = "Sue" });

        List<LastName> lastNames = new List<LastName>();
        lastNames.Add(new LastName { ID = 1, Name = "Doe" });
        lastNames.Add(new LastName { ID = 3, Name = "Smith" });

        HashSet<int> ids = new HashSet<int>();
        foreach (var name in firstNames)
        {
            ids.Add(name.ID);
        }
        foreach (var name in lastNames)
        {
            ids.Add(name.ID);
        }
        List<FullName> fullNames = new List<FullName>();
        foreach (int id in ids)
        {
            FullName fullName = new FullName();
            fullName.ID = id;
            FirstName firstName = firstNames.Find(f => f.ID == id);
            fullName.FirstName = firstName != null ? firstName.Name : string.Empty;
            LastName lastName = lastNames.Find(l => l.ID == id);
            fullName.LastName = lastName != null ? lastName.Name : string.Empty;
            fullNames.Add(fullName);
        }
    }
}
public class FirstName
{
    public int ID;

    public string Name;
}

public class LastName
{
    public int ID;

    public string Name;
}
class FullName
{
    public int ID;

    public string FirstName;

    public string LastName;
}

, Если реальное количество является большим для формирования HashSet вместо этого, циклы foreach могут использоваться код ниже:

List<int> firstIds = firstNames.Select(f => f.ID).ToList();
List<int> LastIds = lastNames.Select(l => l.ID).ToList();
HashSet<int> ids = new HashSet<int>(firstIds.Union(LastIds));//Only unique IDs will be included in HashSet
0
ответ дан 23 November 2019 в 05:57
поделиться
Другие вопросы по тегам:

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