从数据结构的角度分析 for each in 比 for in 快的多_javascript技巧
之前听说火狐的JS引擎支持for each in的语法,例如下述的代码:
var arr = [10,20,30,40,50];
for each(var k in arr)
console.log(k);
即可直接遍历出arr数组的内容。
由于只有FireFox才支持,所以几乎所有的JS代码都不用这一特征。
不过在ActionScript里天生就支持for each的语法,不论Array还是Vector,还是Dictionary,只要是可枚举的对象都可以for in和for each in。
之前并没有感觉有太大的差异,为了懒得敲一个each单词,一直用熟悉的for in来遍历。
不过今天仔细琢磨了会,从数据结构的角度分析了下,觉得for in和for each in效率上有着本质的区别,无论是JS还是AS。
原因很简单:Array不是真正意义上的数组!
何为真正意义的数组?当然就是传统语言里type[]定义的数据类型,所有元素都是连续保存的。
“Array”虽然也是数组的意思,但熟悉JS的都知道,它其实是个非线性的伪数组,下标可以是任意数字。写入arr[1000000]并非真正申请容纳一百万个元素的空间,而是把1000000转换成相应的哈希值,对应到很小一块储存空间里,从而节省了大量内存。
例如有如下数组:
var arr = [];
arr[10] = 1000;
arr[20] = 2000;
arr[30] = 5000;
arr[40] = 8000;
arr[200] = 9000;
用for...in遍历Array,是个很累赘的过程:
遍历时每次访问arr[k],都要进行一次Hash(k)计算,根据散列表的容量取模,如果存在冲突还得寻找最终的值结果。
如果支持for each...in的语法,其内部的数据结构就决定了会快很多:
Array里直接把每个values作为节点,通过链表关联起来维护。每当有值添加或删除,就更新其链接关系。
当for each...in遍历时,只需从第一个节点往后迭代即可,无需任何Hash计算。
当然,对于AS3里Vector这样的线性数组来说,两者相差不大;同理,HTML5里支持二进制的数组ArrayBuffer也是如此。不过从理论上来看,即使arr是个连续的线性数组,for each in还是要快一点:
for...in遍历时,每次访问arr[k]都要进行下标越界检查;而for each in则根据内部链表,直接从底层反馈出迭代变量,节省了越界检查的过程。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kernelsecuritycheckfailure (kegagalan pemeriksaan kernel) adalah jenis kod henti yang agak biasa Walau bagaimanapun, tidak kira apa sebabnya, ralat skrin biru menyebabkan ramai pengguna merasa tertekan dengan berhati-hati. 17 penyelesaian kepada skrin biru kernel_security_check_failure Kaedah 1: Alih keluar semua peranti luaran Apabila mana-mana peranti luaran yang anda gunakan tidak serasi dengan versi Windows anda, ralat skrin biru Kernelsecuritycheckfailure mungkin berlaku. Untuk melakukan ini, anda perlu mencabut semua peranti luaran sebelum cuba memulakan semula komputer anda.

Bolehkah skype Win10 dinyahpasang? Ini adalah soalan yang ingin diketahui oleh ramai pengguna, kerana ramai pengguna mendapati bahawa aplikasi ini disertakan dalam program lalai pada komputer mereka, dan mereka bimbang bahawa pemadamannya akan menjejaskan operasi sistem tapak web ini membantu pengguna Mari kita lihat dengan lebih dekat cara menyahpasang Skype for Business dalam Win10. Cara menyahpasang Skype for Business dalam Win10 1. Klik ikon Windows pada desktop komputer, dan kemudian klik ikon tetapan untuk masuk. 2. Klik "Guna". 3. Masukkan "Skype" dalam kotak carian dan klik untuk memilih hasil yang ditemui. 4. Klik "Nyahpasang". 5

Cara menggunakan for untuk mencari n faktorial: 1. Gunakan pernyataan "for (var i=1;i<=n;i){}" untuk mengawal julat lintasan gelung kepada "1~n"; badan, gunakan "cj *=i" Darab nombor daripada 1 kepada n, dan tetapkan hasil darab kepada pembolehubah cj 3. Selepas gelung berakhir, nilai pembolehubah cj ialah faktorial bagi n, dan kemudian keluarkannya.

Perbezaan: 1. untuk gelung melalui setiap elemen data melalui indeks, manakala untukSetiap gelung melalui elemen data tatasusunan melalui program asas JS 2. kerana boleh menamatkan pelaksanaan gelung melalui kata kunci rehat, tetapi untukSetiap tidak boleh; . for boleh mengawal pelaksanaan gelung dengan mengawal nilai pembolehubah gelung, tetapi forEach tidak boleh 4. untuk boleh memanggil pembolehubah gelung di luar gelung, tetapi forEach tidak boleh memanggil pembolehubah gelung di luar gelung 5. Kecekapan pelaksanaan bagi; adalah lebih tinggi daripada untukSetiap.

Apakah struktur kawalan aliran biasa dalam Python? Dalam Python, struktur kawalan aliran ialah alat penting yang digunakan untuk menentukan susunan pelaksanaan program. Mereka membenarkan kami melaksanakan blok kod yang berbeza berdasarkan syarat yang berbeza, atau melaksanakan blok kod berulang kali. Berikut akan memperkenalkan struktur kawalan proses biasa dalam Python dan memberikan contoh kod yang sepadan. Pernyataan bersyarat (jika lain): Pernyataan bersyarat membolehkan kami melaksanakan blok kod yang berbeza berdasarkan syarat yang berbeza. Sintaks asasnya ialah: jika keadaan 1: #apabila keadaan

Pengenalan Dalam pembangunan projek perniagaan sebenar, semua orang harus biasa dengan operasi mengalih keluar elemen yang tidak memenuhi syarat dari senarai yang diberikan, bukan? Ramai pelajar boleh segera memikirkan pelbagai cara untuk mencapainya, tetapi adakah semua cara yang anda fikirkan tidak berbahaya kepada manusia dan haiwan? Banyak operasi yang kelihatan normal sebenarnya adalah perangkap, dan ramai orang baru mungkin terjerumus ke dalamnya jika mereka tidak berhati-hati. Jika malangnya, pengecualian dilemparkan dan ralat dilaporkan apabila kod berjalan, ini adalah satu rahmat Sekurang-kurangnya kod itu boleh ditemui dan diselesaikan dalam masa tanpa ralat dilaporkan, tetapi pelbagai masalah pelik muncul secara tidak dapat dijelaskan dalam logik perniagaan. . Ini lebih tragis Kerana jika anda tidak memberi perhatian kepada masalah ini, ia boleh menyebabkan bahaya tersembunyi untuk perniagaan seterusnya. Jadi, apakah kaedah pelaksanaannya? Apakah pelaksanaan yang mungkin

Python menyokong gelung, dan sintaksnya berbeza sedikit daripada bahasa lain (seperti JavaScript atau Java). Blok kod berikut menunjukkan cara menggunakan gelung for dalam Python untuk mengulangi elemen dalam senarai: Coretan kod di atas mencetak tiga huruf dalam baris berasingan. Anda boleh mengehadkan output kepada baris yang sama dengan menambahkan koma "," selepas pernyataan cetakan (jika anda menentukan banyak aksara untuk dicetak, ia akan "membalut"), kodnya adalah seperti berikut: Apabila anda ingin memaparkannya dalam satu baris dan bukannya berbilang baris Untuk kandungan teks, anda boleh menggunakan bentuk kod di atas. Python juga menyediakan terbina dalam

Melaksanakan fungsi flip menggunakan bahasa Go boleh dilaksanakan dengan cepat melalui gelung for. Fungsi flip adalah untuk membalikkan susunan elemen dalam rentetan atau tatasusunan, dan boleh digunakan dalam banyak senario, seperti membalikkan rentetan, membalikkan elemen tatasusunan, dsb. Mari kita lihat cara menggunakan gelung for bagi bahasa Go untuk merealisasikan fungsi flip rentetan dan tatasusunan, dan melampirkan contoh kod tertentu. Melibas rentetan: packagemainimport("fmt") menyeronokkan
