C# 当数据和时间在不同的数组中时,以时间范围模式获取数据
我有一个数据数组(double[]data)和一个日期时间列表(list datetime)。数据数组的每个位置都与日期时间的位置相关。我的意思是:数据[I]是在日期时间[I]中收集的 现在我想用一周的模式(7天24小时)过滤收集的数据。 因此,我有一周的模式:C# 当数据和时间在不同的数组中时,以时间范围模式获取数据,c#,.net,arrays,linq,C#,.net,Arrays,Linq,我有一个数据数组(double[]data)和一个日期时间列表(list datetime)。数据数组的每个位置都与日期时间的位置相关。我的意思是:数据[I]是在日期时间[I]中收集的 现在我想用一周的模式(7天24小时)过滤收集的数据。 因此,我有一周的模式: class WeekPattern { List<DayPattern> week; public WeekPattern(List<DayPattern> _week) {
class WeekPattern
{
List<DayPattern> week;
public WeekPattern(List<DayPattern> _week)
{
week = _week;
}
public bool isInRange(DateTime time)
{
return week.Any(i => i.isInRange(time));
}
}
class DayPattern
{
DayOfWeek day;
List<bool> hours;
public DayPattern(List<bool> _hours, DayOfWeek _day)
{
hours = _hours;
day = _day;
}
public bool isInRange(DateTime time)
{
if (time.DayOfWeek != day)
return false;
return hours[time.Hour];
}
}
获得匹配日期列表后,只需为每个匹配调用datetimes列表上的IndexOf()函数,然后使用返回从double[]中提取值 样本:
var date = new DateTime(2013, 1, 12);
List<DateTime> dates = new List<DateTime>() { new DateTime(2013, 1, 11), date, new DateTime(2013, 1, 13) };
double[] values = new double[] { 0, 1, 2 };
var filtered = dates.Where(x => x == date);
foreach (var found in filtered)
{
Console.Write(values[dates.IndexOf(found)]);
}
Console.ReadLine();
var date=新日期时间(2013,1,12);
列表日期=新列表(){new DateTime(2013,1,11),date,new DateTime(2013,1,13)};
double[]值=新的double[]{0,1,2};
var filtered=日期,其中(x=>x==日期);
foreach(在筛选后的
{
Console.Write(值[dates.IndexOf(find)]);
}
Console.ReadLine();
获得匹配日期列表后,只需为每个匹配调用datetimes列表上的IndexOf()函数,然后使用返回键从双精度[]中提取值
样本:
var date = new DateTime(2013, 1, 12);
List<DateTime> dates = new List<DateTime>() { new DateTime(2013, 1, 11), date, new DateTime(2013, 1, 13) };
double[] values = new double[] { 0, 1, 2 };
var filtered = dates.Where(x => x == date);
foreach (var found in filtered)
{
Console.Write(values[dates.IndexOf(found)]);
}
Console.ReadLine();
var date=新日期时间(2013,1,12);
列表日期=新列表(){new DateTime(2013,1,11),date,new DateTime(2013,1,13)};
double[]值=新的double[]{0,1,2};
var filtered=日期,其中(x=>x==日期);
foreach(在筛选后的
{
Console.Write(值[dates.IndexOf(find)]);
}
Console.ReadLine();
您可以尝试以下方法(Select方法的此重载接受元素索引):
唯一的问题是,我需要验证该值是否等于-1。但这对我有用
编辑:更好的解决方案是使用Where方法重载,该方法在lambda表达式上使用元素索引:
var filteredData = data.Where((d, i) =>
{
return pattern.isInRange(datetimes[i]);
});
您可以尝试以下操作(Select方法的此重载接受元素索引): 唯一的问题是,我需要验证该值是否等于-1。但这对我有用 编辑:更好的解决方案是使用Where方法重载,该方法在lambda表达式上使用元素索引:
var filteredData = data.Where((d, i) =>
{
return pattern.isInRange(datetimes[i]);
});
你说的“获取数据(双[])”是指小时/分钟还是什么?我不清楚你的问题。你指的是什么double[],我有两个列表:数据列表(double[])和时间列表(DateTime列表)。每个数据[i]都是在时间[i]中收集的。我想得到在一定时间范围内收集的数据。所以,我所说的数据(double[])是指经过过滤的数据列表。你所说的“获取数据(double[])”是指小时/分钟还是什么?你的问题我不清楚。你指的是什么double[],我有两个列表:数据列表(double[])和时间列表(DateTime列表)。每个数据[i]都是在时间[i]中收集的。我想得到在一定时间范围内收集的数据。所以,我所说的数据(double[])是指经过过滤的数据列表。我认为您的lambda表达式应该工作得很好。我现在无法检查,但几个小时后我会检查并勾选答案,如果它有效;)double[]result=data.Where((d,i)=>pattern.isInRange(datetimes[i]).ToArray();工作得很好。唯一的“缺陷”是datetimes中的索引i不存在。但是在我的例子中,数据数组和datetimes数组都有相同的长度:)我认为lambda表达式应该工作得很好。我现在无法检查,但几个小时后我会检查并勾选答案,如果它有效;)double[]result=data.Where((d,i)=>pattern.isInRange(datetimes[i]).ToArray();工作完美。唯一的“缺陷”是datetimes中的索引i不存在。但在我的例子中,数据数组和datetimes数组都具有相同的长度:)
var filteredData = data.Where((d, i) =>
{
return pattern.isInRange(datetimes[i]);
});