Возвратите индексы первых элементов во вложенном списке
У меня есть список пользовательского типа, который содержит перечислимый тип в качестве свойства.
Я хотел бы найти индексы всех первых вхождений каждого перечисления в перечисляемом типе в моем списке.
Я думал о выводе различных типов и затем нахождении первых по этой последовательности, но функция 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();