我有一个包含数字的列表,我想使用LINQ找到最小值(而不是值)的位置
示例:
var lst = new List<int>() { 3, 1, 0, 5 };
现在我正在寻找一个返回给我的函数
输出=2
因为最小值在列表中的位置2。
发布于 2009-07-10 17:18:10
var list = new List<int> { 3, 1, 0, 5 };
int pos = list.IndexOf(list.Min()); // returns 2
发布于 2009-07-10 17:26:35
由于您特别要求一个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;
然而,这并不意味着LINQ是这个问题的最佳解决方案……
编辑:
对于更复杂的代码,这会执行得更好:
int index =
values
.Select((n, i) => new { Value = n, Index = i })
.Aggregate((a,b) => a.Value < b.Value ? a : b)
.Index;
为了获得最佳性能,您可以使用一个简单的循环遍历这些项,同时跟踪最低的项:
int index = 0, value = values[0];
for (int i = 1; i < values.Length; i++) {
if (values[i] < value) {
value = values[i];
index = i;
}
}
发布于 2016-09-05 16:26:23
获取位置的最佳方法是使用FindIndex
。此函数仅适用于List<>
示例
int id = listMyObject.FindIndex(x => x.Id == 15);
如果您有枚举器或数组,请使用此方法
int id = myEnumerator.ToList().FindIndex(x => x.Id == 15);
或
int id = myArray.ToList().FindIndex(x => x.Id == 15);
https://stackoverflow.com/questions/1110789
复制相似问题