从列表中获取最小值

Get minimum value from list

我有一个class这样的ABC

public class ABC{
public int Id {get;set;}
public int UserCount {get;set;}
}

现在我将以下记录添加到 ABC 类型的列表中

List<ABC> lstABC = new List<ABC>();
lstABC.Add(new ABC(){Id=1,UserCount=5});
lstABC.Add(new ABC(){Id=2,UserCount=15});
lstABC.Add(new ABC(){Id=3,UserCount=3});
lstABC.Add(new ABC(){Id=4,UserCount=20});

我还有一个 int 类型的列表

List<int> lstIds = new List<int>();
lstIds.Add(1);
lstIds.Add(3);
lstIds.Add(4);

现在我想通过比较 lstABC 中的 Id 应该与 lstIds 中存在的项目相匹配的列表来找出 UserCount 的最小值。我可以通过使用循环获得 UserCount 的最小值,但是有没有其他方法可以通过避免循环以优化的方式获得该值?

您可以使用 Enumerable.Join 到 link 两个列表:

var joined = from id in lstIds
             join x in lstABC 
             on id equals x.Id 
             select x;
int minValue = joined.Min(x => x.UserCount);

这比循环更有效,因为 Join 使用集合来查找匹配项。

给猫剥皮的方法不止一种,这个效率有点低:

int minValue = lstABC.Where(x => lstIds.Contains(x.ID)).Min(x => x.UserCount);

试试下面的代码:

        int min = lstABC.Min(entry => entry.UserCount);
        var a = lstABC.Where(e => e.UserCount == min).FirstOrDefault();
        var resul = lstIds.Where(e => e.Equals(a.Id)).FirstOrDefault();
        var result = lstABC.Where(n =>n.Id == resul).FirstOrDefault();