C# 从包含年份和小数点的对象列表中,将每年小数点最高的对象添加到新列表中
我有一个班级C# 从包含年份和小数点的对象列表中,将每年小数点最高的对象添加到新列表中,c#,list,linq,C#,List,Linq,我有一个班级 public class Region { public string Id { get; set; } public string Name { get; set; } public List<Participation> Participations { get; set; } } 每年有多个年份和多个条目,但我只想获取每年小数点最高的区域,对每个区域重复并将其添加到新列表中。因此,如果1950年有10个条目,我只想要所有条目中小数点最高的
public class Region
{
public string Id { get; set; }
public string Name { get; set; }
public List<Participation> Participations { get; set; }
}
每年有多个年份和多个条目,但我只想获取每年小数点最高的区域,对每个区域重复并将其添加到新列表中。因此,如果1950年有10个条目,我只想要所有条目中小数点最高的一个,或者如果平局的话,两者都要。我将所有区域存储在一个变量中
var regions = await GetRegionList();
IList<Region> TopRegions = new List<Region>();
var regions=await GetRegionList();
IList TopRegions=新列表();
我不确定是否应该使用正则表达式或LINQ,但在这两种方法上我都没有多大进展。我尝试在正则表达式中使用
Max()
方法,但在decimal上不允许使用,我不知道如何将decimal.Round()
与正则表达式一起使用。您的要求写得不是很清楚,但我认为这是您最终想要的:
IList<Region> TopRegions = regions
.SelectMany(r => r.Participations)
.GroupBy(p => p.Year)
.Select(g =>
{
var max = g.Max(p => p.ParticipationPercentage);
return g.Where(p => p.ParticipationPercentage == max)
.Select(p => p.Region);
})
.SelectMany(r => r)
.Distinct()
.ToList();
IList TopRegions=区域
.SelectMany(r=>r.参与)
.GroupBy(p=>p.Year)
.选择(g=>
{
var max=g.max(p=>p.ParticipationPercentage);
返回g.Where(p=>p.ParticipationPercentage==max)
.选择(p=>p.Region);
})
.SelectMany(r=>r)
.Distinct()
.ToList();
这将获取原始区域列表,将其展平为所有参与的列表,并按年度列出这些组,然后查找每年的最大参与百分比,以及具有与该年最大参与率匹配的参与的区域列表。最后,将区域列表展平为单个列表,并删除重复的区域,留下表示“顶部区域”的不同区域的简单列表
Fiddle:您的要求写得不是很清楚,但我认为这就是您最终想要的:
IList<Region> TopRegions = regions
.SelectMany(r => r.Participations)
.GroupBy(p => p.Year)
.Select(g =>
{
var max = g.Max(p => p.ParticipationPercentage);
return g.Where(p => p.ParticipationPercentage == max)
.Select(p => p.Region);
})
.SelectMany(r => r)
.Distinct()
.ToList();
IList TopRegions=区域
.SelectMany(r=>r.参与)
.GroupBy(p=>p.Year)
.选择(g=>
{
var max=g.max(p=>p.ParticipationPercentage);
返回g.Where(p=>p.ParticipationPercentage==max)
.选择(p=>p.Region);
})
.SelectMany(r=>r)
.Distinct()
.ToList();
这将获取原始区域列表,将其展平为所有参与的列表,并按年度列出这些组,然后查找每年的最大参与百分比,以及具有与该年最大参与率匹配的参与的区域列表。最后,将区域列表展平为单个列表,并删除重复的区域,留下表示“顶部区域”的不同区域的简单列表
Fiddle:这个问题并不清楚,但这里有一个正则表达式的例子
public void RegionTest()
{
var region1 = new Region() { Id = "L001", Name = "Local1", Participations = new List<Participation>() };
var region2 = new Region() { Id = "L002", Name = "Local2", Participations = new List<Participation>() };
var region3 = new Region() { Id = "L003", Name = "Local3", Participations = new List<Participation>() };
var participant1 = new Participation() { Year = "2000", ParticipationPercentage = 90, RegionId = "A001", Region = region1 };
var participant2 = new Participation() { Year = "2000", ParticipationPercentage = 85, RegionId = "A002", Region = region2 };
var participant3 = new Participation() { Year = "2000", ParticipationPercentage = 80, RegionId = "A003", Region = region3 };
var participant4 = new Participation() { Year = "2001", ParticipationPercentage = 70, RegionId = "B004", Region = region1 };
var participant5 = new Participation() { Year = "2001", ParticipationPercentage = 80, RegionId = "B005", Region = region2 };
region1.Participations = new List<Participation>() { participant1, participant4};
region2.Participations = new List<Participation>() { participant2, participant5 };
var topRegions = new List<Region>();
var list1 = new List<decimal?>();
var list2 = new List<decimal?>();
foreach (var region in region1.Participations)
{
list1.Add(region.ParticipationPercentage);
if ( region.ParticipationPercentage >= list1.Max())
{ topRegions.Add(region.Region); }
}
foreach (var region in region2.Participations)
{
list2.Add(region.ParticipationPercentage);
if (region.ParticipationPercentage >= list2.Max())
{ topRegions.Add(region.Region); }
}
}
public void RegionTest()
{
var region1=new Region(){Id=“L001”,Name=“Local1”,Participations=new List()};
var region2=new Region(){Id=“L002”,Name=“Local2”,Participations=new List()};
var region3=new Region(){Id=“L003”,Name=“Local3”,Participations=new List()};
var participant1=新参与(){Year=“2000”,参与百分比=90,RegionId=“A001”,Region=region1};
var participant2=新参与(){Year=“2000”,参与百分比=85,RegionId=“A002”,Region=region2};
var participant3=新参与(){Year=“2000”,参与百分比=80,RegionId=“A003”,Region=region3};
var participant4=新参与(){Year=“2001”,参与百分比=70,RegionId=“B004”,Region=region1};
var participant5=新参与(){Year=“2001”,参与百分比=80,RegionId=“B005”,Region=region2};
region1.Participations=新列表(){participant1,participant4};
region2.Participations=新列表(){participant2,participant5};
var topRegions=新列表();
var list1=新列表();
var list2=新列表();
foreach(区域1中的var区域。参与)
{
列表1.添加(地区参与百分比);
如果(region.ParticipationPercentage>=list1.Max())
{topRegions.Add(region.region);}
}
foreach(区域2中的var区域。参与)
{
列表2.Add(地区参与百分比);
如果(region.ParticipationPercentage>=list2.Max())
{topRegions.Add(region.region);}
}
}
这个问题并不清楚,但这里有一个正则表达式示例
public void RegionTest()
{
var region1 = new Region() { Id = "L001", Name = "Local1", Participations = new List<Participation>() };
var region2 = new Region() { Id = "L002", Name = "Local2", Participations = new List<Participation>() };
var region3 = new Region() { Id = "L003", Name = "Local3", Participations = new List<Participation>() };
var participant1 = new Participation() { Year = "2000", ParticipationPercentage = 90, RegionId = "A001", Region = region1 };
var participant2 = new Participation() { Year = "2000", ParticipationPercentage = 85, RegionId = "A002", Region = region2 };
var participant3 = new Participation() { Year = "2000", ParticipationPercentage = 80, RegionId = "A003", Region = region3 };
var participant4 = new Participation() { Year = "2001", ParticipationPercentage = 70, RegionId = "B004", Region = region1 };
var participant5 = new Participation() { Year = "2001", ParticipationPercentage = 80, RegionId = "B005", Region = region2 };
region1.Participations = new List<Participation>() { participant1, participant4};
region2.Participations = new List<Participation>() { participant2, participant5 };
var topRegions = new List<Region>();
var list1 = new List<decimal?>();
var list2 = new List<decimal?>();
foreach (var region in region1.Participations)
{
list1.Add(region.ParticipationPercentage);
if ( region.ParticipationPercentage >= list1.Max())
{ topRegions.Add(region.Region); }
}
foreach (var region in region2.Participations)
{
list2.Add(region.ParticipationPercentage);
if (region.ParticipationPercentage >= list2.Max())
{ topRegions.Add(region.Region); }
}
}
public void RegionTest()
{
var region1=new Region(){Id=“L001”,Name=“Local1”,Participations=new List()};
var region2=new Region(){Id=“L002”,Name=“Local2”,Participations=new List()};
var region3=new Region(){Id=“L003”,Name=“Local3”,Participations=new List()};
var participant1=新参与(){Year=“2000”,参与百分比=90,RegionId=“A001”,Region=region1};
var participant2=新参与(){Year=“2000”,参与百分比=85,RegionId=“A002”,Region=region2};
var participant3=新参与(){Year=“2000”,参与百分比=80,RegionId=“A003”,Region=region3};
var participant4=新参与(){Year=“2001”,参与百分比=70,RegionId=“B004”,Region=region1};
var participant5=新参与(){Year=“2001”,参与百分比=80,RegionId=“B005”,Region=region2};
region1.Participations=新列表(){participant1,participant4};
region2.Participations=新列表(){participant2,participant5};
var topRegions=新列表();
var list1=新列表();
var list2=新列表();
foreach(区域1中的var区域。参与)
{
列表1.添加(地区参与百分比);
如果(注册