C# 计算块中的断点
谁能帮我计算一下发生的街区之间的距离。 这是我的课程,在我的列表中,我从区块中获得开始和结束时间:C# 计算块中的断点,c#,C#,谁能帮我计算一下发生的街区之间的距离。 这是我的课程,在我的列表中,我从区块中获得开始和结束时间: private class Block { public DateTime Start { get; set; } public DateTime End { get; set; } } 列表中的时间是这样的 List<Block> blocks = new List<Block>(); 现在我需要到达和离开时间,也就是开始和停止之间的阻塞时间
private class Block
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
列表中的时间是这样的
List<Block> blocks = new List<Block>();
现在我需要到达和离开时间,也就是开始和停止之间的阻塞时间,来计算它们的总和
public class Presence
{
public DateTime arrival { get; set; }
public DateTime departure { get; set; }
}
List<Presence> presence = new List<Presence>();
time received in the presence list:
arrival departure
1899-12-30 08:03:00.000; 1899-12-30 09:21:00.000
1899-12-30 09:36:00.000; 1899-12-30 10:34:00.000
1899-12-30 10:45:00.000; 1899-12-30 12:05:00.000
1899-12-30 13:03:00.000; 1899-12-30 14:24:00.000
1899-12-30 14:34:00.000; 1899-12-30 16:14:00.000
1899-12-30 16:27:00.000; 1899-12-30 18:02:00.000
对于我来说,有必要获取从开始到结束的时间段内的金额(出发-到达)由于我对问题理解错误,这里有一个更新:
使用系统;
使用System.Collections.Generic;
名称空间控制台EAPP1
{
班级计划
{
静态void Main(字符串[]参数)
{
var blocks=新列表
{
新区块
{
结束=新的日期时间(1899,12,30,11,45,0),开始=新的日期时间(1899,12,30,8,30,0)
},
新区块
{
结束=新的日期时间(1899,12,30,17,0,0),开始=新的日期时间(1899,12,30,13,15,0)
}
};
var presences=新列表
{
新存在
{
到达=新的日期时间(1899,12,30,8,3,0),
出发=新的日期时间(1899、12、30、9、21、0)
},
新存在
{
到达=新的日期时间(1899,12,30,9,36,0),
出发=新的日期时间(1899、12、30、10、34、0)
},
新存在
{
到达=新的日期时间(1899,12,30,10,45,0),
出发=新的日期时间(1899、12、30、12、5、0)
},
新存在
{
到达=新的日期时间(1899,12,30,13,3,0),
出发=新的日期时间(1899、12、30、14、24、0)
},
新存在
{
到达=新的日期时间(1899,12,30,14,34,0),
出发=新的日期时间(1899、12、30、16、14、0)
},
新存在
{
到达=新的日期时间(1899,12,30,16,27,0),
出发=新的日期时间(1899、12、30、18、2、0)
}
};
//分组出席
var group=newdictionary();
foreach(块中的var块)
{
添加(块,新列表());
foreach(存在中的var存在)
{
如果(presence.disease>=block.Start&&presence.Arrival保存上一个presence对象,请使用两层循环,
你可以更简洁地解决这个问题
Presence pre = null;
int sum = 0;
foreach(var cur in presences)
{
if(pre != null)
{
foreach(var b in blocks)
{
if(pre.departure >= b.Start && b.End >=cur.arrival)
{
sum += (cur.arrival - pre.departure).Minutes;
break;
}
}
}
pre = cur;
}
Console.WriteLine(sum);//49
您可以使用IEnumerable使其更通用。@多米尼克谢谢您的帮助,我有点困惑,我想要TotalTime的总和,即(到达-离开)在那些介于开始和停止之间的问题中,我看不到出现的列表在哪里?那么我误解了你的问题。也许我们可以编辑你的问题并保留更多simple@DominicJonas是的,我们不同意,看看我的linq SumofBreakoffBlocks,我正试图计算出发到达时间,现在我希望它在blocks之间,我的代码是这样的esn不起作用,但在我的整个问题中,归结到计算(出发-到达)),这是区块链(开始和停止)之间的@DominicMonas你还能给我写一个时间跨度总计吗?非常感谢你的时间和努力。对于区块[0]:你想要时间跨度仅为9:36到10:34的timespan
(哪个完全在区块的时间范围内
)或者对于所有3个区块,其中也只有出发
和到达
在范围内?@Dominicjons我需要所有出发的时间跨度-在区块之间的到达,即:08:30->[09:36:00.000-09:21:00]+[10:45:00-10:34:00]<-11:45,第二个街区也是。
double sumOfBreakOfBlocks = presence.Where(x => blocks.Any(b =>( x.arrival > b.Start && x.arrival > b.End) && x.arrival > x.departure)
&& blocks.Any(b => (x.departure < b.End && x.departure > b.Start) && x.departure < x.arrival)).Sum
(x => (x.arrival.TimeOfDay - x.departure.TimeOfDay).TotalHours);
1899-12-30 09:36:00.000 - 1899-12-30 09:21:00.000; (15)
1899-12-30 10:45:00.000 - 1899-12-30 10:34:00.000; (11)
1899-12-30 14:34:00.000 - 1899-12-30 14:24:00.000; (10)
1899-12-30 16:27:00.000 - 1899-12-30 16:14:00.000; (13)
Presence pre = null;
int sum = 0;
foreach(var cur in presences)
{
if(pre != null)
{
foreach(var b in blocks)
{
if(pre.departure >= b.Start && b.End >=cur.arrival)
{
sum += (cur.arrival - pre.departure).Minutes;
break;
}
}
}
pre = cur;
}
Console.WriteLine(sum);//49