为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 C# 的嵌套循环中为特定数据对象添加元素?

如何在 C# 的嵌套循环中为特定数据对象添加元素?

C#
MYYA 2022-11-21 21:38:09

我有一个如下所示的数据对象:


public class RootObject

  public string ticker {get;set;}

  public List<Result> results {get;set;} 

}

结果对象就像:


{

  public double open {get;set;}

  public double close {get;set;}

}

现在每次我都会对同一个代码有多个结果。所以我想将所有结果元素添加到同一个代码中。而不是多次将其创建到列表中。


public static List<RootObject> minuteAggregateList = new List<RootObject>();

public void historicalMinuteAggData(string symbol)

        {

            int daysCount = 0;

            for(int i=1; i<=20; i++)

            {

                DateTime date = DateTime.Now.Date.AddDays(-i);

                if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)

                {

                    daysCount++;

                    var startUnixTime = (date.Add(new TimeSpan(13, 30, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;

                    var endUnixTime = (date.Add(new TimeSpan(20, 00, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;

                    using (var reader = new StreamReader(new WebClient().OpenRead(string.Format("API For Fetch Data"))))

                    {

                        var x = reader.ReadLine();

                        RootObject data = JsonConvert.DeserializeObject<RootObject>(x);

                        minuteAggregateList.Add(data);

                    }

                }

                if (daysCount == 7)

                    break;

            }

        }

现在,它在 minuteAggregateList 中为我们提供了相同代码的多个结果。如果 AAPL 在列表中,那么我需要如何在 AAPL 的嵌套结果中添加新元素。那么如何才能在特定代码下的嵌套位置添加元素呢?


查看完整描述

2 回答

?
慕哥9229398

TA贡献1607条经验 获得超1个赞

从下面的代码中,您将能够在现有的勾选列表中添加结果列表,并且它还允许您将列表放置在您选择的位置。


public static List<RootObject> minuteAggregateList = new List<RootObject>();

public void historicalMinuteAggData(string symbol)

        {

            int daysCount = 0;

            for(int i=1; i<=20; i++)

            {

                DateTime date = DateTime.Now.Date.AddDays(-i);

                if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)

                {

                    daysCount++;

                    var startUnixTime = (date.Add(new TimeSpan(13, 30, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;

                    var endUnixTime = (date.Add(new TimeSpan(20, 00, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;

                    using (var reader = new StreamReader(new WebClient().OpenRead(string.Format("API For Fetch Data"))))

                    {

                        var x = reader.ReadLine();

                        RootObject data = JsonConvert.DeserializeObject<RootObject>(x);

                        if (chk != null)

                        {

                            minuteAggregateList.Single(q => q.ticker == symbol).results.InsertRange(0, data.results);

                        }

                        else

                            minuteAggregateList.Add(data);

                    }

                }

                if (daysCount == 7)

                    break;

            }

        }


查看完整回答
反对 回复 2022-11-21
?
慕田峪9158850

TA贡献0条经验 获得超7个赞

在将数据添加到列表之前,需要检查相同的代码值。


public static List<RootObject> minuteAggregateList = new List<RootObject>();

public void historicalMinuteAggData(string symbol)

        {

            int daysCount = 0;

            for(int i=1; i<=20; i++)

            {

                DateTime date = DateTime.Now.Date.AddDays(-i);

                if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)

                {

                    daysCount++;

                    var startUnixTime = (date.Add(new TimeSpan(13, 30, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;

                    var endUnixTime = (date.Add(new TimeSpan(20, 00, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;

                    using (var reader = new StreamReader(new WebClient().OpenRead(string.Format("API For Fetch Data"))))

                    {

                        var x = reader.ReadLine();

                        RootObject data = JsonConvert.DeserializeObject<RootObject>(x);

                        if(minuteAggregateList.Any(node => node.ticker == data.ticker))

                        {

                             minuteAggregateList.Where(node => node.ticker == data.ticker)

                                                .Select(val => {

                                                      val.results.AddRange(data.results); 

                                                      return val;

                                                        }).ToList();

                        }

                        else

                        {

                             minuteAggregateList.Add(data);

                        }

                    }

                }

                if (daysCount == 7)

                    break;

            }

        }

要将数据添加到匹配列表,首先需要选择匹配的代码(即使用Where())。而不是在Select()添加结果数据之后。之后,需要使用 . 将更改应用于现有列表ToList()。


查看完整回答
反对 回复 2022-11-21
  • 2 回答
  • 0 关注
  • 5 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信