Возвратите индексы первых элементов во вложенном списке

У меня есть список пользовательского типа, который содержит перечислимый тип в качестве свойства.
Я хотел бы найти индексы всех первых вхождений каждого перечисления в перечисляемом типе в моем списке.

Я думал о выводе различных типов и затем нахождении первых по этой последовательности, но функция First требует тип, для которого я получаю ошибку

using System;
using System.Collections.Generic;

namespace space
{

    TypeEnum { E1, E2, E3}

    public class Class1
    {
        public TypeEnum Eobj { get; set; }
        public double doubObj { get; set; }

        public Class1()
        {
            doubObj = 0.0;
            Eobj = TypeEnum.E1;

        }

        public Class1(double doubObjIn, TypeEnum EobjIn)
        {
            doubObj =  doubObjIn;
            Eobj = EobjIn;

        }
    }

    public static void Main()
    {
        List<Class1> list1 = new List<Class1>();
        Class1 o1 = new Class1(1, TypeEnum.E1);
        Class1 o2 = new Class1(2, TypeEnum.E1);
        Class1 o3 = new Class1(3, TypeEnum.E2);

        list1.Add(o1);
        list1.Add(o2);
        list1.Add(o3);


        // first try to get a sequence of which enumerated types are present
        var ba = list1.Select(o => o.Eobj).Distinct();
        //then try to find where they are in the list
        var bb = list1.Select(o => o.Eobj).First(ba);



    }

}

1 ответ

Решение

Это то, что я понял, как ваш запрос. Дан список с этими предметами

List<Class1> list1 = new List<Class1>();
Class1 o1 = new Class1(1, TypeEnum.E1);
Class1 o2 = new Class1(2, TypeEnum.E1);
Class1 o3 = new Class1(3, TypeEnum.E2);

Вы хотите свести это к списку, где только один объект, содержащий TypeEnum найден. Если это так, рассмотрите возможность использования DistinctBy

И тогда вы можете просто позвонить, используя

var newList = list1.DistinctBy(a => a.Eobj);

Если вы хотите просто получить индексы (индексы?), То вы можете написать это так:

var indexes = list1.Select(x => x.Eobj).Distinct().Select(type => 
    list1.FindIndex(o => o.Eobj == type)).ToList();

Если вы хотите узнать значения перечисления и соответствующие им индексы в списке, вы можете написать это так:

var typesWithIndexes = list1.Select(x => x.Eobj).Distinct()
  .Select(type => new
    {
      Type = type,
      Index = list1.FindIndex(o => o.Eobj == type)
    }).ToList();
Другие вопросы по тегам