C# 从集合中选择最小值以包含重复项
我收集了4件物品。我想找到tottprig最低的DutPdSeqNum以包含重复项 我想生成一个linq查询,查找最小值的项目编号。此查询应返回一个列表 如果存在重复项(如上所示),则应包括等于最小值的所有重复项目编号。查询应返回一个列表 查询应该返回一个int列表,列表中有DutPdSeqNum 2和3C# 从集合中选择最小值以包含重复项,c#,linqpad,C#,Linqpad,我收集了4件物品。我想找到tottprig最低的DutPdSeqNum以包含重复项 我想生成一个linq查询,查找最小值的项目编号。此查询应返回一个列表 如果存在重复项(如上所示),则应包括等于最小值的所有重复项目编号。查询应返回一个列表 查询应该返回一个int列表,列表中有DutPdSeqNum 2和3 List<DutPdItem> dutPdItemList = new List<DutPdItem>(); DutPdItem dutPd1 = new DutPd
List<DutPdItem> dutPdItemList = new List<DutPdItem>();
DutPdItem dutPd1 = new DutPdItem()
{
DutPdSeqNum = 1,
FltTfpTot = 6.4m,
RigDpMin = 0.0m,
RigDhr = 0.0m,
RigAdg = 0.0m,
RigThr = 0.0m
};
DutPdItem dutPd2 = new DutPdItem()
{
DutPdSeqNum = 2,
FltTfpTot = 4.0m,
RigDpMin = 0.0m,
RigDhr = 1.55m,
RigAdg = 0.0m,
RigThr = 0.0m
};
DutPdItem dutPd3 = new DutPdItem()
{
DutPdSeqNum = 3,
FltTfpTot = 4.0m,
RigDpMin = 0.0m,
RigDhr = 1.55m,
RigAdg = 0.0m,
RigThr = 0.0m
};
DutPdItem dutPd4 = new DutPdItem()
{
DutPdSeqNum = 4,
FltTfpTot = 6.3m,
RigDpMin = 0.0m,
RigDhr = 0.0m,
RigAdg = 0.0m,
RigThr = 0.0m
};
dutPdItemList.Add(dutPd1);
dutPdItemList.Add(dutPd2);
dutPdItemList.Add(dutPd3);
dutPdItemList.Add(dutPd4);
dutPdItemList.Dump("DutyPeriod Item List");
var THRtoDistribute = 2.715m;
// gets the lowest duty period by total pay
var lowestDutyPeriodsByTotPay = dutPdItemList.GroupBy(x => x.TotTfpRig)
.Where(g => g.Count() >= 2)
.Select(y => y.Key);
// this query does not work, I cannot figure our why
var lowestDutyPeriod = dutPdItemList.Select(dp => dp.TotTfpRig ==
lowestDutyPeriodsByTotPay);
lowestDutyPeriodsByTotPay.Dump("lowest duty period");
}
class DutPdItem
{
public int DutPdSeqNum { get; set; }
public decimal FltTfpTot { get; set; }
public decimal RigDpMin { get; set; }
public decimal RigDhr { get; set; }
public decimal RigAdg { get; set; }
public decimal RigThr { get; set; }
public decimal TotTfpRig => FltTfpTot + RigDpMin + RigDhr + RigAdg +
RigThr;
public struct IdAndValue{//示例数据结构
公共int id;
公共双val;
}
静态IEnumerable findAllMinimums(ICollection数据)
{
var byValue=data.ToLookup(d=>d.val);
返回byValue[byValue.Min(grp=>grp.Key)];
}
要获取列表,请执行
findAllMinimums(…).ToList()
此集合是哈希集合还是任何集合?此查询将在集合(列表)上运行。请在此处发布一些示例代码和确切的数据结构好吗?你试过什么?什么不起作用?您面临哪些问题?请在问题中添加其他信息。。选择(d=>d.id)
var minTfp = dutPdItemList.Min(dp => dp.TotTfpRig).Dump("Min Tfp");
var minDutPd = dutPdItemList.Where(dp => dp.TotTfpRig == minTfp).Select(dp => dp.DutPdSeqNum).ToList().Dump("Min Duty Pds");
var countMin = minDutPd.Count().Dump("count minDutPd");
var secondLowestTfp = dutPdItemList.OrderBy(dp => dp.TotTfpRig).Select(dp => dp.TotTfpRig).Skip(countMin).First().Dump("2nd Lowest Tfp");
var secondLowestDutPd = dutPdItemList.OrderBy(dp => dp.TotTfpRig).Select(dp => dp.DutPdSeqNum).Skip(countMin).First().Dump("2nd Lowest Duty Pd");
public struct IdAndValue { // Example data structure
public int id;
public double val;
}
static IEnumerable<IdAndValue> findAllMinimums(ICollection<IdAndValue> data)
{
var byValue = data.ToLookup(d => d.val);
return byValue[byValue.Min(grp => grp.Key)];
}