I have two lists in my program that the length of the lists is not equal. I want to subtract the members of these two lists element by element and save them in one list.
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++;
}
When I use this method I encounter the exception system.IndexOutOfRangeException.
for (int i = 0; i <= arrivals.Count; i++)
{
delays.Add(departure[i] - arrivals[i]);
}
foreach (var item in delays)
Console.WriteLine(item);
How can I do this?
If you write i <arrivals.Count in the for loop, the problem will be solved. You can also use the Zip method in Linq.
var delay = departure.Zip(arrivals, (depart, arri) => depart - arri);
foreach (var item in delay)
{
Console.WriteLine(item);
}
Well, IndexOutOfRangeException
means that index i
exceeds Count
of either departure
or arrivals
so departure[i] - arrivals[i]
becomes illegal. You can amend the for
loop as
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);
with i < Math.Min(arrivals.Count, depart.Count)
conditon we now guarantee, that i
will never be beyond both departure
and arrivals
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With