如何在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中分配除一个以外的所有元素?
如果我有这个
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)
使用切片和数组连接。
该程序演示了如何执行此操作,并修复了代码中的一些问题(例如,您没有指定数组的元素类型):
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;
您还可以省略声明的边界,A
并B
让它们从初始化中获取边界。这确实意味着当Element_To_Ignore
为 1 时,B
将有边界2..4
而不是1..3
。只要您始终引用B'First
, B'Last
,B'Range
而不是使用硬连线常量,这应该不是问题。这也意味着设置Element_To_Ignore
为 0 或 5 会导致B
设置为(5,3,2,6)
.
我在这里创建了一个更详细的演示。