使用.length返回不正确的元素数

时间:2018-08-19 15:32:34

标签: arrays d

在使用动态数组的.length属性时,为什么在我使用appender之后,它会返回不正确数量的元素?

如果我使用~=语法,它将返回正确的长度。

代码:

import std.stdio;
import std.array : appender;

void main()
{
    //declaring a dynamic array
    int [] arrayofNumbers;
    //append an element using the ~= syntax
    arrayofNumbers ~= 1;
    arrayofNumbers ~= 2;
    //print the array
    writeln(arrayofNumbers);

    //Using appender
    auto appendNumber = appender(arrayofNumbers);
    appendNumber.put(10);
    writeln(appendNumber.data);

    writeln(arrayofNumbers.length);

}

我正在阅读此article,我认为相关部分指出:

  

这的另一个结果是长度不是数组   属性,这是切片属性。这意味着长度字段不是   一定是数组的长度,它是切片的长度。   这会使使用该语言的新手感到困惑。

但这是指切片和动态数组。

1 个答案:

答案 0 :(得分:2)

根据documentation appender.data返回托管数组。因此,获取元素数量的正确方法是在返回的数组上调用.length

更正的代码:

int [] managedArray = appendNumber.data;
writeln(managedArray.length);

writeln(appendNumber.data.length);