Return 嵌套列表中第一个元素的索引
Return Indices of first elements in a nested list
我有一个自定义类型的列表,其中包含一个枚举类型 属性。
我想在我的列表中的枚举类型中找到每个枚举的所有第一次出现的索引。
我想过输出不同的类型,然后在这个序列中找到第一个,但是第一个函数需要一个类型,我收到一个错误
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);
}
}
这就是我所理解的你的问题。
给出包含这些项目的列表
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);
如果只想获取索引(indices?),那么可以这样写:
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();
我有一个自定义类型的列表,其中包含一个枚举类型 属性。
我想在我的列表中的枚举类型中找到每个枚举的所有第一次出现的索引。
我想过输出不同的类型,然后在这个序列中找到第一个,但是第一个函数需要一个类型,我收到一个错误
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);
}
}
这就是我所理解的你的问题。 给出包含这些项目的列表
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);
如果只想获取索引(indices?),那么可以这样写:
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();