【问题标题】:Subtract the elements of two lists from each other with unknown element lengths in C# [duplicate]C#中元素长度未知的两个列表的元素相互减去[重复]
【发布时间】:2021-07-08 20:09:03
【问题描述】:

我的程序中有两个列表的长度不相等。我想逐个元素地减去这两个列表的成员并将它们保存在一个列表中。

            List<double> arrivals = new List<double>();
            List<double> departure = new List<double>();
            List<double> delays = new List<double>();
            double departure_p = 0.8;
            double arrival_p = 0.45;
            int slot = 0;
            while (slot < 1000)
            {
                Random a = new Random();
                double arrival_t = a.NextDouble();
                Random d = new Random();
                double departure_t = d.NextDouble();

                if (departure_t <= departure_p)
                {
                    departure.Add(departure_t);
                }
                if (arrival_t <= arrival_p)
                {
                    arrivals.Add(arrival_t);
                }
                slot++;
           }

当我使用这种方法时,我遇到了异常 system.IndexOutOfRangeException。


for (int i = 0; i <= arrivals.Count; i++)
            {
                delays.Add(departure[i] - arrivals[i]);
            }
            foreach (var item in delays)
                Console.WriteLine(item);

我该怎么做?

【问题讨论】:

  • 如果列表长度不同,请edit 澄清 OP 想要实现的目标。他们没有在昨天的版本中澄清它......所以希望现在有人知道他们想要什么。
  • 您的要求似乎不完整。当一个列表的元素比另一个列表多时,期望的行为是什么?当您实际上没有配对时,进行配对减法没有多大意义。我们应该只包括匹配对吗?我们是否应该将未到达的航班视为到达DateTime.Now?等等。
  • for (int i = 0; i &lt; Math.Min(arrivals.Count, depart.Count); i++) {...}
  • new Random().NextDouble() 总是得到相同的结果,你需要缓存Random 对象

标签: c#


【解决方案1】:

如果在for循环中写i

var delay = departure.Zip(arrivals, (depart, arri) => depart - arri);
            
            foreach (var item in delay)
            {
                Console.WriteLine(item);
            }

【讨论】:

    【解决方案2】:

    好吧,IndexOutOfRangeException 表示索引i 超过 Countdeparturearrivals 所以departure[i] - arrivals[i] 成为非法。您可以将for 循环修改为

    for (int i = 0; i < Math.Min(arrivals.Count, depart.Count); i++)
      delays.Add(departure[i] - arrivals[i]); 
    
    foreach (var item in delays)
      Console.WriteLine(item);
    

    i &lt; Math.Min(arrivals.Count, depart.Count) 条件下,我们现在保证i 永远不会超过departurearrivals

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 2016-01-12
      • 2019-07-30
      相关资源
      最近更新 更多