数组如何以内存方式工作?

时间:2015-03-20 12:47:08

标签: arrays indexing language-agnostic

所以我一直看到人们在数组中循环以搜索值,甚至是唯一的值。

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

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

起初我以为这只是记忆力的损失,但是我遇到的越多,我就越不自信。

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

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

正如ryanyuyu指出的那样,还有.NET Dictionary Object。 我使用它而不是列表对象来使用密钥更快地访问值。

抱歉我的英语很差,并提前致谢。

1 个答案:

答案 0 :(得分:0)

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

这变得更加复杂,因为数组允许存储异构数据集或可变长度数据。以某种方式,数组索引只是指向数据的起始内存位置。

这显然意味着你基本上有一大堆二进制数据存储在内存中。如果你想在其中找到任何一个特定的数据,你别无选择,只能遍历所有数据。如果您需要直接访问某个部分,则需要直接指向其在内存中的位置。显然,如果你知道数组索引,那就是你的指针。此索引可以是字符串或其他数据类型,在这种情况下,数组本身通常称为字典,散列映射,关联数组或其他依赖于实现语言的东西。这些通常实现为散列映射,其中密钥被散列并与存储器地址相关联,该存储器地址指向实际数据。这允许使用有意义的索引值快速直接查找内存位置。