数组如何在内存方面工作?

How does an array work memory-wise?

所以我看到人们循环遍历数组以搜索值,甚至是唯一值。

例如,当他们想知道数组中是否存在字符串时:

for(i;i<=count(theArray);i++) {
    if(theArray[i]=="textImSearching") {theBoolean = true;}
}

一开始以为只是失忆,但越运行越陷越没信心

我每次都在做的事情就是让数组由我要搜索的唯一值索引,所以在这种情况下,我只会做:

theBoolean = theArray["textImSearching"]!=null;

正如 ryanyuyu 所指出的,还有 .NET 字典对象。 我也使用它而不是列表对象来使用键更快地访问值。

抱歉我的英语不好,在此先感谢。

一般来说,数组是一个内存块,其中的值背靠背地装入其中。例如,如果您的数组仅包含一种数据类型,并且此类型具有已定义的固定长度,如 int[],则内存将包含背靠背打包的整数。索引到数组 (arr[i]) 就像获取 arr 的起始内存位置并向其添加 i * len(int) 以找到您想要的特定值一样简单。这也是为什么数组通常是零索引的原因。

这变得更加复杂,因为数组允许存储异构数据集合或可变长度数据。无论如何,数组索引只是指向数据的起始内存位置。

这显然意味着您基本上在内存中存储了大量二进制数据。如果您想在其中找到任何一个特定的数据,您别无选择,只能遍历所有数据。如果您需要直接访问某个片段,则需要一个指向其在内存中位置的直接指针。显然,如果您知道数组索引,那就是您的指针。该索引可以是字符串或其他数据类型,在这种情况下,数组本身通常称为字典、哈希图、关联数组或其他名称,具体取决于实现语言。这些通常作为哈希图实现,其中键被哈希并与指向实际数据的内存地址相关联。这允许使用有意义的索引值快速直接查找内存位置。