使用 .length returns 不正确的元素数量
Using .length returns incorrect number of elements
当使用动态数组的 .length
属性 为什么 return 元素数量不正确 在 我使用 appender
?
如果我使用 ~=
语法,它 return 是正确的长度。
代码:
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,我认为相关部分指出:
Another consequence of this is that the length is not an array
property, it's a slice property. This means the length field is not
necessarily the length of the array, it's the length of the slice.
This can be confusing to newcomers to the language.
然而,这是指切片和动态数组。
根据documentationappender.data
returns一个托管数组。所以获取元素数量的正确方法是在返回的数组上调用.length
。
更正后的代码:
int [] managedArray = appendNumber.data;
writeln(managedArray.length);
或
writeln(appendNumber.data.length);
当使用动态数组的 .length
属性 为什么 return 元素数量不正确 在 我使用 appender
?
如果我使用 ~=
语法,它 return 是正确的长度。
代码:
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,我认为相关部分指出:
Another consequence of this is that the length is not an array property, it's a slice property. This means the length field is not necessarily the length of the array, it's the length of the slice. This can be confusing to newcomers to the language.
然而,这是指切片和动态数组。
根据documentationappender.data
returns一个托管数组。所以获取元素数量的正确方法是在返回的数组上调用.length
。
更正后的代码:
int [] managedArray = appendNumber.data;
writeln(managedArray.length);
或
writeln(appendNumber.data.length);