数组循环在 Ada 中的第一个索引之后开始?

Ele*_*ena 1 loops ada

在 Ada 中,如何从第一个索引之后开始按任何索引遍历任何数组?“任何数组”是指空数组和索引也不是整数的数组。

编辑:如果需要初始条件来处理极端情况 - 例如:空数组 - 那很好。

编辑:指定“任何索引”而不仅仅是第二个。

Jim*_*ers 6

请记住,Ada 'for' 循环不包括增量运算符。相反,它遍历一系列值。值的范围可能是整个数组索引集,也可能是该范围的连续子集。完成此操作的最简单方法是声明一个不受约束的数组类型,然后传递要处理的数组切片。

procedure main is    
     type Days is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
     type Day_Counts is array(Days range <>) of Integer;
     function Total(Item : in Day_Counts) return Integer is
        Sum : Integer := 0;
     begin
        for Day in Item'Range loop
            Sum := Sum + Item(Day);
        end loop;
        return Sum;
     end Total;

     Weekly_Counts : DayCounts := (1,2,3,4,5,6,7);
     Weekly_Sum : Integer;
     Weekend_Sum : Integer;
  begin
    Weekly_Sum := Total(Weekly_Counts);
    Weekend_Sum := Total(Weekly_Counts(Sat..Sun));
  end main;
Run Code Online (Sandbox Code Playgroud)

Weekly_Sum 中的值将是所有 7 个数组元素的总和。Weekend_Sum 中的值将仅为 Sat 和 Sun 值的总和。