C# 在嵌套列表中搜索最大值和索引
我知道我可以通过这种方式从一个简单的列表中获得最大值和索引C# 在嵌套列表中搜索最大值和索引,c#,C#,我知道我可以通过这种方式从一个简单的列表中获得最大值和索引 List<Employee> emplist = new List<Employee>() { new Employee{Age=15, name = "Tom"}, new Employee{Age=17, name = "Billy"},
List<Employee> emplist = new List<Employee>()
{
new Employee{Age=15, name = "Tom"},
new Employee{Age=17, name = "Billy"},
new Employee{Age=25, name = "Sam"}
};
int maxvalue = emplist.Select(i => i.Age).Max();
int index = empList.FindIndex(t => t.Age == maxvalue);
最大值为24。
我还想获得两个索引(员工的索引2和项目的索引1)您可以使用
的重载来选择
哪些项目也会投影索引以创建匿名类型:
var maxItem = emplist
.Select((emp, index) => new
{
maxProject = emp.project
.Select((proj, pIndex) => new{ proj, pIndex })
.OrderByDescending(x => x.proj.ID)
.First(),
emp, index
})
.OrderByDescending(x => x.maxProject.proj.ID)
.First();
Console.Write("Max-Value:{0} Emp-Index:{1} Project-Index:{2}"
, maxItem.maxProject.proj.ID
, maxItem.index
, maxItem.maxProject.pIndex);
(免责声明:未测试,假设所有员工都有一个非空的
列表项目
)您可以使用选择
的重载来创建匿名类型:
var maxItem = emplist
.Select((emp, index) => new
{
maxProject = emp.project
.Select((proj, pIndex) => new{ proj, pIndex })
.OrderByDescending(x => x.proj.ID)
.First(),
emp, index
})
.OrderByDescending(x => x.maxProject.proj.ID)
.First();
Console.Write("Max-Value:{0} Emp-Index:{1} Project-Index:{2}"
, maxItem.maxProject.proj.ID
, maxItem.index
, maxItem.maxProject.pIndex);
(免责声明:未经测试,假设所有员工都有一个非空的
列表项目
)这将在不订购项目列表的情况下执行相同操作:
var employee = emplist.Aggregate((e1, e2) => (e1.project.Max(p1 => p1.ID) > e2.project.Max(p2 => p2.ID)) ? e1 : e2);
var employeeidx = emplist.IndexOf(employee);
var project = employee.project.Aggregate((p1, p2) => (p1.ID > p2.ID) ? p1 : p2);
var projectidx = employee.project.IndexOf(project);
var value = project.ID;
这将在不为项目列表排序的情况下执行相同的操作:
var employee = emplist.Aggregate((e1, e2) => (e1.project.Max(p1 => p1.ID) > e2.project.Max(p2 => p2.ID)) ? e1 : e2);
var employeeidx = emplist.IndexOf(employee);
var project = employee.project.Aggregate((p1, p2) => (p1.ID > p2.ID) ? p1 : p2);
var projectidx = employee.project.IndexOf(project);
var value = project.ID;
试试下面的Linq
var result = emplist.Select((x,i) => new { index = i, item = x})
.SelectMany(x => x.item.project.Select(
(a,i) => new { index = x.index, subindex = i, id = a.ID}))
.OrderByDescending(x => x.id )
.First();
- 第一个索引将在
结果中。索引
=2
- 第二个索引将在
结果中。子索引
=1
- ID将出现在
=24结果中。ID
var result = emplist.Select((x,i) => new { index = i, item = x})
.SelectMany(x => x.item.project.Select(
(a,i) => new { index = x.index, subindex = i, id = a.ID}))
.OrderByDescending(x => x.id )
.First();
- 第一个索引将在
结果中。索引
=2
- 第二个索引将在
结果中。子索引
=1
- ID将出现在
=24结果中。ID