将数组的切片分配给新数组

时间:2019-02-24 03:48:25

标签: ada gnat

我的语法错误,但似乎找不到关于我的问题正确语法的信息页。我有一个正在使用的函数,该函数需要一个数组,并且我想对该数组的一个切片进行一些计算,因此我想只根据传入的数组(尤其是那些索引)创建一个切片的数组。有人可以帮我解决一下这里的语法,因为这总是告诉我missing ','

p1: UnboundArray(1 .. 15);
p1DataBits: UnboundArray(1 .. 7);
begin
    p1DataBits := (p1(3 | 5 | 7 | 9 | 11 | 13 | 15));
end;

2 个答案:

答案 0 :(得分:3)

您似乎想使用slices将一个数组的某些元素复制到另一数组。由于所有元素都不是连续的,因此最好使用aggregating,显示为hereconcatenating所需的元素。

 p1DataBits : UnboundArray(1 .. 7) := p1(3) & p1(5) & p1(7) …;

您可能误读了syntaxdiscrete_range;在这种情况下,|符号“分隔其他项目”,而不是表示文字delimiter

答案 1 :(得分:3)

另一种无需昂贵连接的解决方案是分配一个直接的,显式的数组表达式:

procedure Odds is
  type UnboundArray is array (Integer range <>) of Integer;
  p1: UnboundArray(1 .. 15);
  p1DataBits: UnboundArray(1 .. 7);
begin
  p1DataBits := (p1(3), p1(5), p1(7), p1(9), p1(11), p1(13), p1(15));
end;