C# 基于数组内容的返回值
从已开始但未结束的数组返回ID的最佳方法是什么。我一直在尝试循环查找匹配的ID,然后检查状态是否为“开始”或“结束”,但我一直与我选择用于排序的ID和状态匹配。(即,我选择数组[0,0]并查找ID 5847,它将在自身上获得匹配)C# 基于数组内容的返回值,c#,arrays,C#,Arrays,从已开始但未结束的数组返回ID的最佳方法是什么。我一直在尝试循环查找匹配的ID,然后检查状态是否为“开始”或“结束”,但我一直与我选择用于排序的ID和状态匹配。(即,我选择数组[0,0]并查找ID 5847,它将在自身上获得匹配) 将2D投影到一个对象中,因为您似乎拥有基于行的对象。 然后在ID上分组,取结束=1/开始=0的最大值 var result = Enumerable .Range(0, array.GetLength(0)) .Select(row =>
将2D投影到一个对象中,因为您似乎拥有基于行的对象。
然后在ID上分组,取结束=1/开始=0的最大值
var result =
Enumerable
.Range(0, array.GetLength(0))
.Select(row => new Foo { id = int.Parse(array[row, 0]), ended = (array[row, 1] == "ended") })
.GroupBy(g=> g.id)
.Select( g=> new { Id=g.Key, MaxEnded= g.Max(r=> r.ended)})
.Where(x=> !x.MaxEnded);
能否确认已在此对象的行中定义了对象。[X,1]是[X,0]id的状态?它就是这样工作的。[x,0]是ID,[x,1]是该ID的状态。我添加了一个假设的答案。举个例子。它应该可以工作。这看起来不错,但我在result.Dump()上遇到了一个错误。因为它没有引用在IEnumerable内部转储。是的,因为dump是一个函数,在dotfidle上使用它来转储变量以显示其内容。如果要显示内容,请使用良好的旧
foreach(foos中的var项){Console.WriteLine(item.property);}
Ohh我明白了。我不使用Dotfidle,我以为我错过了什么。谢谢。最后一个问题,如果结果都不适用,我应该检查结果是否返回null吗?
var result =
Enumerable
.Range(0, array.GetLength(0))
.Select(row => new Foo { id = int.Parse(array[row, 0]), ended = (array[row, 1] == "ended") })
.GroupBy(g=> g.id)
.Select( g=> new { Id=g.Key, MaxEnded= g.Max(r=> r.ended)})
.Where(x=> !x.MaxEnded);