如何在ada中分配除一个之外的所有元素?

如何在ada中分配除一个之外的所有元素?,ada,Ada,如何在ada中分配除一个之外的所有元素 如果我有这个 element_to_ignore : integer := 3; a : array(1..4) := (5,3,2,6); b : array(1..a'length-1) := a( all but element_to_ignore ); 我需要这个结果: b=(5,3,6)使用切片和数组连接 此程序演示了如何执行此操作,并修复了代码中的一些问题(例如,您没有指定数组的元素类型): 带有Ada.Text\u IO;使用Ada.Tex

如何在ada中分配除一个之外的所有元素

如果我有这个

element_to_ignore : integer := 3;
a : array(1..4) := (5,3,2,6);
b : array(1..a'length-1) := a( all but element_to_ignore );
我需要这个结果:

b=(5,3,6)

使用切片和数组连接

此程序演示了如何执行此操作,并修复了代码中的一些问题(例如,您没有指定数组的元素类型):

带有Ada.Text\u IO;使用Ada.Text\u IO;
程序Foo is
元素\u到\u忽略:整数:=3;
类型数组_Of_Integer是整数的数组(正范围);
A:整数(1..4)的数组\=(5,3,2,6);
B:整数的数组(1..A'Length-1)
:=A(A'第一..元素\u到\u忽略-1)&
A(元素到忽略+1..A'Last);
开始
对于B'范围循环中的I
放线(整数图像(B(I));
端环;
完富;;
您还可以省略
A
B
声明的边界,让它们从初始化中获得边界。这确实意味着当
元素u To_Ignore
为1时,
B
将有
2..4
的边界,而不是
1..3
。只要您始终参考
B'First
B'Last
B'Range
,而不是使用硬连线常量,这应该不会是一个问题。这也意味着将
元素设置为\u Ignore
为0或5会导致
B
被设置为
(5,3,2,6)


我创建了一个更详细的演示。

开始之前,请参见+1以完成声明中分配的任务!
with Ada.Text_IO; use Ada.Text_IO;
procedure Foo is
    Element_To_Ignore : Integer := 3;
    type Array_Of_Integer is array(Positive Range <>) of Integer;
    A : Array_Of_Integer(1..4) := (5,3,2,6);
    B : Array_Of_Integer(1..A'Length-1)
        := A(A'First .. Element_To_Ignore-1) &
           A(Element_To_Ignore+1 .. A'Last);
begin
    for I In B'Range Loop
        Put_Line(Integer'Image(B(I)));
    end loop;
end Foo;