Nano Hash - криптовалюты, майнинг, программирование

Попытка сгруппировать внутренний дочерний список и получить общие записи

Ниже мой класс:

public class MyData
    {
        public string Region { get; set; }
        public List<TestList> TestList { get; set; }
    }

 public class TestList
    {
        public int? TestId { get; set; }
    }

Этот вышеприведенный класс содержит ниже образцы данных (var data = List<MyData>()):

[o] : Region = "abc"
      "TestList": 
       [
         {
           TestId : 100
         },
         {
           TestId : 101
         },
       ],
[1] : Region = "Pqr"
      "TestList": 
       [
         {
           TestId : 100
         },
         {
           TestId : 101
         },
       ],
[2] : Region = "Lmn"
      "TestList": 
       [
         {
           TestId : 100
         },
         {
           TestId : 101
         },
         {
           TestId : 102
         },
       ]

Ниже приведен пример класса, в котором я пытаюсь получить список тестов, и для каждого теста мне нужен список вариантов ранга, т.е. Abc, Pq, lmn :

public class Test
    {
        public int TestId { get; set; }
        public List<VariantsRank> VariantsRanks { get; set; }
    }

    public class VariantsRank
    {
        public string Name { get; set; }
        public int Rank { get; set; }
    }

Я пытаюсь создать окончательный вывод в классе выше, т.е. List<Test>, как показано ниже:

[0] :Test Id = 100
   "VariantsRanks": 
       [
         {
           Name : "abc",
           Rank : 0   
         },
         {
            Name : "Pqr",
            Rank : 1 
         },
         {
           Name : "Lmn",
           Rank :  2
         },
       ],
[1] :Test Id = 101
   "VariantsRanks": 
       [
         {
           Name : "abc",
           Rank : 0   
         },
         {
            Name : "Pqr",
            Rank : 1 
         },
         {
           Name : "Lmn",
           Rank :  2
         },
       ],
[2] :Test Id = 102
   "VariantsRanks": 
       [
         {
           Name : "lmn",
           Rank : 0   
         },
       ]

Итак, вот как я пытаюсь сгенерировать List<Test>, но здесь я не понимаю, как мне сгруппировать по вложенному TestList, чтобы я мог получить общее имя VariantsRank?

16.02.2017

Ответы:


1

Первый шаг — «сгладить» вложенный список с помощью SelectMany, чтобы у вас были кортежи TestId, Region. Затем легко сгруппировать по TestId, чтобы получить регионы в порядке ранжирования. Это будет выглядеть примерно так:

IEnumerable<Test> Group(this IEnumerable<MyData> data)
{
    var pairs = data
        .SelectMany(d => d.TestList
             .Select(t => new {
                 Region = d.Region,
                 TestId: t.TestId
             })
        );

    // now group by testId
    var groups = pairs.GroupBy(pair => pair.TestId);

    // now convert each group to your Test class
    var result = groups.Select(group => new Test
        {
            TestId = pair.Key,
            VariantsRanks = group.Select((p, i) =>
               new VariantsRank { Name = p.Region, Rank = i }).ToList()
        }
    );

    return result;
}
16.02.2017
  • Да, это сработало. Большое спасибо за ваши добрые усилия, чтобы помочь мне, и, пожалуйста, продолжайте помогать в том же духе :) 17.02.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..