调整数组大小以丢失空值

时间:2015-08-14 15:00:52

标签: c# arrays dynamic-arrays

我已经制作了一个循环,每个月从当前年龄到年份x循环,比如80.

我有一个数组yearCalculation年和每年计算包含一个monthCalculation数组。 (以防万一有人想要对Lists发表评论,我目前正在使用数组,并想看看是否有一个简单的解决方案。)

这看起来如下:

yearCalculations[] years = years.InstantiateArray(//Number of years, [80 minus age]//);
monthCalculations[] months = months.InstantiateArray(//Number of months in a year, [this should be 12]//);

在实例化之后,我循环遍历所有时段并用各种计算填充它们。 (但是,在达到年龄x后,所有计算将导致零):

for (int i = 0; i < yearCalculations.Length; i++) {
    for (int j = 0; j < yearCalculations[i].monthCalculations.Length; j++) {
        Double age = calculateAge(birthDate, dateAtTimeX);
        if(age < ageX){
            //Do all sorts of calculations.
        }else{
            //Break out of the loops
        }
    }
}

正如您在X(80)年龄时所理解的那样,计算将完成,但去年的计算将包含一些结果,而不进行计算。让我们说这是从7月开始。调整此数组大小的最简单方法是什么,删除所有月份而不进行计算(所以索引6和之后)?

仅仅为了完整性,这里是instantiateArray函数;

public static T[] InstantiateArray<T>(this T[] t, Int64 periods) where T : new() 
{
    t = new T[periods];
    for (int i = 0; i < t.Length; i++){
        t[i] = new T();
    }
    return t;
}

3 个答案:

答案 0 :(得分:7)

要从数组中删除空白值,可以使用LINQ

var arr = years.Where(x => !string.IsNullOrEmpty(x)).ToArray();//or what ever you need

答案 1 :(得分:2)

您无法调整数组的大小。

To quote MSDN:

  

创建数组实例时,将建立维度数和每个维度的长度。这些值在实例的生命周期内无法更改。

Array.Resize实际上做的是分配一个新数组并复制元素。理解这一点非常重要。您没有调整阵列的大小,但重新分配它。

只要您使用数组,最终答案将归结为&#34;分配一个新数组,然后将您想要保留的内容复制到其中#34;。

答案 2 :(得分:1)

Array.Resize方法应该使用新的总长度。你知道新的总长度是总的旧长度 - (12个月作为一年中的int)