在Linq排名

时间:2012-04-26 07:15:55

标签: linq

有一个通用的数字列表,比如说

{980,850,700,680} --- n nos。

我尝试将上面的列表与十进制数比较。比如690.,我需要的是O / p,以得到我要输入的数字的排名(“692”。我,所需的O / P应该是排名=“4”

如何获得上述情况的O / p .. ??

3 个答案:

答案 0 :(得分:0)

如果要查找列表中int的十进制输入的精确匹配,可以使用FindIndex。

    var numbers = new List<int>() { 980, 850, 700, 680 };
    var dec = new Decimal(680.0);
    var res = numbers.FindIndex(x => x == dec);

它返回匹配的从0开始的位置。

答案 1 :(得分:0)

从Alex的帖子开始,我认为你正在寻找

var numbers = new List<int>() { 980, 850, 700, 680 };
var dec = new Decimal(692.0);
var temp = numbers.Count(x => x > dec) + 1;

这将返回您要找的位置

答案 2 :(得分:0)

您的问题不明确,我不确定690正扮演什么角色。

假设用户可以输入一个数字,并且您希望在插入时找到列表中数字的等级(索引)。假设您的列表应按降序排序,因为您希望新int的位置根据其值:

var input = 692;
var numbers = new List<int>() { 980, 850, 700, 680 };
var firstLower = numbers.OrderByDescending(i => i)
    .Select((i, index) => new { Value = i, Index = index })
    .FirstOrDefault(x => x.Value < input);
var rank = firstLower == null ? numbers.Count + 1 : firstLower.Index + 1;

请注意,如果您的列表已经排序,OrderByDescending可能是多余的,但我认为您的样本数据只是偶然排序。