You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ada函数能否创建类似Java ArrayList的嵌套数组并返回?

Ada嵌套不定长数组实现方案

你需要的嵌套可变长整数数组属于「不定长数组的不定长数组」结构,Ada中因为静态类型约束,不能直接嵌套不定长数组作为元素,需要通过访问类型或标准库容器包装实现,具体步骤如下:

基础实现(访问类型方案)

1. 类型定义

首先逐层定义需要的数组类型:

-- 定义内层不定长整数数组
type Indef_Int_Array is array (Positive range <>) of Integer;
-- 定义内层数组的访问类型(解决不定长类型无法作为数组元素的编译限制)
type Indef_Int_Array_Access is access Indef_Int_Array;
-- 定义外层嵌套不定长数组,元素为内层数组的访问类型
type Nested_Int_Array is array (Positive range <>) of Indef_Int_Array_Access;

2. 编写返回目标结构的函数

直接构造你需要的[[],[3],[3,5],[2,3,5]]结构返回即可:

function Get_Target_Array return Nested_Int_Array is
begin
    return Result : Nested_Int_Array := (
        1 => new Indef_Int_Array'(()), -- 空数组
        2 => new Indef_Int_Array'((3)),
        3 => new Indef_Int_Array'((3, 5)),
        4 => new Indef_Int_Array'((2, 3, 5))
    );
end Get_Target_Array;

3. 使用与注意事项

  • 读取内层元素需要先解引用访问类型,例如获取第三个内层数组的第二个元素(值为5)的写法为:Your_Array(3).all(2)
  • 访问类型申请的堆内存需要手动释放避免泄漏,可以通过Ada.Unchecked_Deallocation定义释放工具:
procedure Free is new Ada.Unchecked_Deallocation (Indef_Int_Array, Indef_Int_Array_Access);
-- 单个元素释放示例:Free(Your_Array(1));

简化实现(Ada 2012+ Indefinite_Holders方案)

如果不想手动管理内存,可以使用Ada 2012引入的Indefinite_Holders容器包装不定长类型,自动管理生命周期:

with Ada.Containers.Indefinite_Holders;

procedure Nested_Array_Example is
    type Indef_Int_Array is array (Positive range <>) of Integer;
    -- 实例化不定长容器包
    package Int_Array_Holders is new Ada.Containers.Indefinite_Holders (Indef_Int_Array);
    use Int_Array_Holders;

    type Nested_Int_Array is array (Positive range <>) of Holder;

    function Get_Target_Array return Nested_Int_Array is
    begin
        return (
            1 => To_Holder(()),
            2 => To_Holder((3)),
            3 => To_Holder((3, 5)),
            4 => To_Holder((2, 3, 5))
        );
    end Get_Target_Array;

    -- 取值示例:Get_Target_Array(3).Element(2) 返回5
begin
    -- 业务逻辑
    null;
end Nested_Array_Example;

取值时直接调用Element方法即可,无需手动释放内存。


内容的提问来源于stack exchange,提问作者wang kom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:48:03