从列表中获取最小值
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();
我有一个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();