Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当数据和时间在不同的数组中时,以时间范围模式获取数据_C#_.net_Arrays_Linq - Fatal编程技术网

C# 当数据和时间在不同的数组中时,以时间范围模式获取数据

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) {

我有一个数据数组(double[]data)和一个日期时间列表(list datetime)。数据数组的每个位置都与日期时间的位置相关。我的意思是:数据[I]是在日期时间[I]中收集的

现在我想用一周的模式(7天24小时)过滤收集的数据。 因此,我有一周的模式:

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]);
        });