Joh*_*sch 73
var list = new List<int> { 3, 1, 0, 5 };
int pos = list.IndexOf(list.Min()); // returns 2
Run Code Online (Sandbox Code Playgroud)
Guf*_*ffa 40
当您特别要求LINQ解决方案时,您所拥有的只是非LINQ解决方案,这里是一个LINQ解决方案:
List<int> values = new List<int> { 3, 1, 0, 5 };
int index =
values
.Select((n, i) => new { Value = n, Index = i })
.OrderBy(n=>n.Value)
.First()
.Index;
Run Code Online (Sandbox Code Playgroud)
然而,这并不意味着LINQ是解决此问题的最佳解决方案......
使用更复杂的代码,这会更好一些:
int index =
values
.Select((n, i) => new { Value = n, Index = i })
.Aggregate((a,b) => a.Value < b.Value ? a : b)
.Index;
Run Code Online (Sandbox Code Playgroud)
为了获得最佳性能,您将使用一个简单的循环来获取项目,同时跟踪最低的:
int index = 0, value = values[0];
for (int i = 1; i < values.Length; i++) {
if (values[i] < value) {
value = values[i];
index = i;
}
}
Run Code Online (Sandbox Code Playgroud)
捕获位置的最佳方法是FindIndex
此功能仅适用于List <>
例
int id = listMyObject.FindIndex(x => x.Id == 15);
Run Code Online (Sandbox Code Playgroud)
如果你有枚举器或数组使用这种方式
int id = myEnumerator.ToList().FindIndex(x => x.Id == 15);
Run Code Online (Sandbox Code Playgroud)
要么
int id = myArray.ToList().FindIndex(x => x.Id == 15);
Run Code Online (Sandbox Code Playgroud)