ໃນການພັດທະນາຊອບແວ, arrays ຫຼື arrays ເປັນຕົວແທນຂອງພາກສ່ວນທີ່ສໍາຄັນຂອງການຂຽນໂປລແກລມ. ພວກເຂົາເປັນໂຄງສ້າງຂໍ້ມູນທີ່ອະນຸຍາດໃຫ້ພວກເຮົາເກັບຮັກສາຊຸດຂໍ້ມູນພາຍໃຕ້ຊື່ດຽວກັນ, ອໍານວຍຄວາມສະດວກໃນການຫມູນໃຊ້ແລະການເຂົ້າເຖິງຂໍ້ມູນ. ບໍ່ວ່າຂະຫນາດແລະປະເພດຂອງຂໍ້ມູນໃດກໍ່ຕາມ, ມີເວລາທີ່ນັກຂຽນໂປລແກລມຕ້ອງການ ສຳເນົາ ຫຼືຂະຫຍາຍອາເຣ. ໃນບົດຂຽນຕໍ່ໄປນີ້, ພວກເຮົາຈະສຸມໃສ່ການອະທິບາຍຢ່າງລະອຽດກ່ຽວກັບວິທີການປະຕິບັດການເຫຼົ່ານີ້ໃນພາສາການຂຽນໂປຼແກຼມທີ່ແຕກຕ່າງກັນ.
ຄວາມເຂົ້າໃຈກ່ຽວກັບຄວາມຕ້ອງການທີ່ຈະຄັດລອກຫຼືຂະຫຍາຍ Array
ໃນການຂຽນໂປລແກລມ, ພວກເຮົາມັກຈະພົບຕົວເອງໃນສະຖານະການທີ່ພວກເຮົາຕ້ອງການ ສຳເນົາ ຫຼືຂະຫຍາຍອາເຣ. ຕົວຢ່າງ, ພວກເຮົາອາດຈະຕ້ອງບັນທຶກສໍາເນົາ ຂອງອາເຣ ເພື່ອປະຕິບັດການດໍາເນີນການໂດຍບໍ່ມີການປ່ຽນແປງ array ຕົ້ນສະບັບ. ຫຼືບາງທີ, array ຂອງພວກເຮົາໄດ້ກາຍເປັນອັນເຕັມທີ່ແລະພວກເຮົາຈໍາເປັນຕ້ອງເພີ່ມຂະຫນາດຂອງມັນເພື່ອເພີ່ມອົງປະກອບເພີ່ມເຕີມ. ສໍາລັບກໍລະນີເຫຼົ່ານີ້, ການດໍາເນີນງານຂອງການຄັດລອກຫຼືຂະຫຍາຍ array ແມ່ນມີຄວາມຈໍາເປັນ. ຟັງຊັນນີ້ບໍ່ພຽງແຕ່ເຮັດຫນ້າທີ່ໃນການຄັດລອກຫຼືເພີ່ມຂະຫນາດຂອງ array, ແຕ່ມັນຍັງສາມາດຊ່ວຍໃຫ້ພວກເຮົາຫຼຸດຜ່ອນການໃຊ້ຫນ່ວຍຄວາມຈໍາໂດຍການເກັບຮັກສາຂໍ້ມູນທີ່ຈໍາເປັນເທົ່ານັ້ນ.
ໃນທາງກົງກັນຂ້າມ, ມັນຄຸ້ມຄ່າ ກ່າວເຖິງວ່າ Arrays ໃນ Java ແມ່ນວັດຖຸທີ່ບໍ່ປ່ຽນແປງໄດ້, ນັ້ນແມ່ນ, ເມື່ອ array ຖືກສ້າງຂຶ້ນ, ຂະຫນາດຂອງມັນບໍ່ສາມາດປ່ຽນແປງໄດ້. ເພື່ອ "ຂະຫຍາຍ" array ໃນ Java, ພວກເຮົາຈະຕ້ອງສ້າງ array ຂະຫນາດໃຫຍ່ໃຫມ່ແລະຫຼັງຈາກນັ້ນຄັດລອກອົງປະກອບຂອງ array ຕົ້ນສະບັບໄປຫາອັນໃຫມ່. ນີ້ສາມາດເປັນຕາເບື່ອເລັກນ້ອຍ, ແຕ່ມີວິທີການສ້າງຢູ່ໃນຫ້ອງສະຫມຸດມາດຕະຖານ Java ເຊັ່ນ System.arraycopy() y Arrays.copyOf() ທີ່ສາມາດສ້າງຄວາມສະດວກ ຂະບວນການນີ້. ສໍາລັບພາສາທີ່ຈັດການໂຄງສ້າງຂໍ້ມູນແບບເຄື່ອນໄຫວ, ເຊັ່ນ JavaScript ຫຼື Python, ຂະບວນການແມ່ນງ່າຍດາຍຫຼາຍແລະມີວິທີການເຊັ່ນ: push() y append() ທີ່ອະນຸຍາດໃຫ້ເພີ່ມອົງປະກອບໃສ່ array ທີ່ມີຢູ່ແລ້ວໂດຍບໍ່ຈໍາເປັນຕ້ອງສ້າງອັນໃຫມ່.
ການເຂົ້າໄປໃນວິທີການຄັດລອກ Arrays ໃນ Javascript
ວິທີການທົ່ວໄປທີ່ສຸດທີ່ຈະຄັດລອກຫຼືເຮັດຊ້ໍາ array ໃນ Javascript ແມ່ນການນໍາໃຊ້ ຂັ້ນຕອນ () ວິທີການ. ວິທີການນີ້ສົ່ງຄືນສໍາເນົາຕື້ນຂອງ array ຈາກ subarray ທີ່ສ້າງຂຶ້ນລະຫວ່າງດັດຊະນີເລີ່ມຕົ້ນແລະສິ້ນສຸດ. ມັນບໍ່ດັດແປງອາເຣຕົ້ນສະບັບ ແລະແຍກອະເຣທີ່ຄັດລອກອອກຈາກອາເຣຕົ້ນສະບັບຢ່າງສົມບູນ. ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະສັງເກດວ່າເມື່ອຄັດລອກວັດຖຸພາຍໃນ array, ການອ້າງອີງຖືກສ້າງຂື້ນກັບວັດຖຸຕົ້ນສະບັບແທນທີ່ຈະສ້າງຕົວຢ່າງໃຫມ່. ນີ້ຫມາຍຄວາມວ່າຖ້າທ່ານດັດແປງວັດຖຸໃນ array ທີ່ຖືກຄັດລອກ, ມັນຈະຖືກດັດແກ້ໃນ array ຕົ້ນສະບັບ. ນີ້ແມ່ນບາງລະຫັດເພື່ອສະແດງໃຫ້ເຫັນ:
let arrayOriginal = ['a', 'b', 'c', 'd', 'e'];
let arrayCopia = arrayOriginal.slice();
Si lo que necesitas es ຂະຫຍາຍອາເຣ, JavaScript ມັນສະເໜີໃຫ້ພວກເຮົາ ຫຼາຍວິທີທີ່ຈະເຮັດມັນ. ວິທີການຫນຶ່ງແມ່ນໃຊ້ຕົວປະຕິບັດການແຜ່ກະຈາຍ. ຕົວປະຕິບັດການນີ້ຊ່ວຍໃຫ້ທ່ານສາມາດຂະຫຍາຍອົງປະກອບທີ່ປ່ຽນແປງໄດ້ພາຍໃນ array ເພື່ອສ້າງ array ໃຫມ່ທີ່ມີອົງປະກອບຂອງ array ຕົ້ນສະບັບແລະອົງປະກອບເພີ່ມເຕີມ. ວິທີການອື່ນແມ່ນວິທີການ concat() ເຊິ່ງສົ່ງຄືນ array ໃຫມ່ທີ່ເປັນຜົນມາຈາກການເຂົ້າຮ່ວມ array ຕົ້ນສະບັບທີ່ມີຫນຶ່ງຫຼືຫຼາຍ array ຫຼືຄ່າ. ສຸດທ້າຍ, ທ່ານຍັງສາມາດໃຊ້ວິທີການ push() ເຊິ່ງເພີ່ມຫນຶ່ງຫຼືຫຼາຍອົງປະກອບໃນຕອນທ້າຍຂອງ array ແລະສົ່ງຄືນຄວາມຍາວໃຫມ່ຂອງ array. ທີ່ນີ້ເຈົ້າມີ ບາງຕົວຢ່າງ:
let array1 = [1, 2, 3];
let array2 = [...array1, 4, 5, 6]; // array2 ahora es [1, 2, 3, 4, 5, 6]
let array3 = [1, 2, 3];
let array4 = array3.concat([4, 5, 6]); // array4 ahora es [1, 2, 3, 4, 5, 6]
let array5 = [1, 2, 3];
array5.push(4, 5, 6); // array5 ahora es [1, 2, 3, 4, 5, 6]
ການຂະຫຍາຍ Array: ເຕັກນິກທີ່ແນະນໍາແລະທາງເລືອກອື່ນໆ
ການຂະຫຍາຍ array ເປັນວຽກທົ່ວໄປໃນການຂຽນໂປລແກລມ, ໂດຍສະເພາະໃນເວລາທີ່ມັນມາກັບການເກັບຮັກສາແລະຈັດການຂໍ້ມູນຈໍານວນຫລາຍ. ຢ່າງໃດກໍ່ຕາມ, ວຽກງານສາມາດທ້າທາຍໄດ້ຖ້າເຕັກນິກທີ່ຖືກຕ້ອງບໍ່ຮູ້ຈັກ. ໃນທີ່ນີ້, ພວກເຮົາຈະປຶກສາຫາລືບາງເຕັກນິກທີ່ແນະນໍາແລະທາງເລືອກອື່ນສໍາລັບການຂະຫຍາຍອາເລ. ກ່ອນອື່ນ ໝົດ, ທ່ານສາມາດໃຊ້ ໜ້າ ທີ່ Array.prototype.concat(). ຟັງຊັນນີ້ລວມສອງອາເຣ ຫຼືຫຼາຍກວ່ານັ້ນ ໃນອັນດຽວ ມາຕຣິກເບື້ອງ. ນອກຈາກນັ້ນ, ມັນບໍ່ໄດ້ດັດແປງ matrices ຕົ້ນສະບັບ, ຊຶ່ງໝາຍຄວາມວ່າ ຄວາມສົມບູນຂອງຂໍ້ມູນຖືກຮັກສາໄວ້. ນີ້ແມ່ນຕົວຢ່າງຂອງວິທີການໃຊ້ Array.prototype.concat():
let array1 = [1, 2, 3];
let array2 = [4, 5, 6];
let newArray = array1.concat(array2);
// newArray ahora es [1, 2, 3, 4, 5, 6]
ທາງເລືອກອື່ນແມ່ນການນໍາໃຊ້ເຕັກນິກການດໍາເນີນການ ແຜ່ກະຈາຍເຊື້ອ (…) . ຕົວປະຕິບັດການນີ້ອະນຸຍາດໃຫ້ທ່ານເອົາອົງປະກອບຈາກ array ແລະຈັດວາງພວກມັນຢູ່ໃນອາເຣໃຫມ່. ບໍ່ເຫມືອນກັບ Array.prototype.concat(), ຕົວປະຕິບັດການແຜ່ກະຈາຍເຮັດວຽກໄດ້ດີກັບ arrays ແລະວັດຖຸ. ມັນຍັງສາມາດຖືກນໍາໃຊ້ເພື່ອຄັດລອກອາເຣ. ນີ້ແມ່ນຕົວຢ່າງຂອງວິທີການນໍາໃຊ້ຕົວປະຕິບັດການແຜ່ກະຈາຍ:
let array1 = [1, 2, 3];
let newArray = [...array1, 4, 5, 6];
// newArray ahora es [1, 2, 3, 4, 5, 6]
ໃນທີ່ສຸດ, ການເລືອກວິທີການນໍາໃຊ້ຈະຂຶ້ນກັບຄວາມຕ້ອງການສະເພາະຂອງໂຄງການຂອງທ່ານ. ຢ່າງໃດກໍຕາມ, ທັງ Array.prototype.concat() ແລະຕົວປະຕິບັດການແຜ່ກະຈາຍແມ່ນເຕັກນິກທີ່ມີປະສິດທິພາບສໍາລັບການຂະຫຍາຍ arrays.
ການຈັດການ Array ທີ່ມີປະສິດທິພາບ: ຜົນກະທົບຕໍ່ການປະຕິບັດລະຫັດ
ເມື່ອຈັດການອາເຣ, ກ ຂອງຮຸ້ນ ທົ່ວໄປທີ່ສຸດແມ່ນການສໍາເນົາຫຼືການຂະຫຍາຍເຫຼົ່ານີ້. ຢ່າງໃດກໍ່ຕາມ, ມັນເປັນສິ່ງຈໍາເປັນທີ່ຈະຮູ້ວິທີການປະຕິບັດການເຫຼົ່ານີ້ ຢ່າງມີປະສິດທິພາບ ເພື່ອຮັບປະກັນການປະຕິບັດລະຫັດທີ່ດີ. ດັ່ງນັ້ນ, ພວກເຮົາຈະວິເຄາະສອງວິທີຕົ້ນຕໍ: Array.prototype.slice() y Array.prototype.concat().
ເມື່ອພວກເຮົາຕ້ອງການຄັດລອກ array, ພວກເຮົາສາມາດໃຊ້ຟັງຊັນ slice(). ວິທີການນີ້ອະນຸຍາດໃຫ້ພວກເຮົາສ້າງສໍາເນົາຕື້ນຂອງສ່ວນຫນຶ່ງຂອງ array ເຂົ້າໄປໃນວັດຖຸ array ໃຫມ່. ເພື່ອເຮັດໃຫ້ຊ້ໍາກັນຂອງ array ຂອງພວກເຮົາ, ພວກເຮົາພຽງແຕ່ໃຊ້ slice ໂດຍບໍ່ມີການໂຕ້ຖຽງໃດໆ, ເຊັ່ນນີ້:
var ຕົ້ນສະບັບ = [1, 2, 3, 4, 5]; var copy = original.slice();
ນີ້ຈະໃຫ້ພວກເຮົາ 'ສໍາເນົາ' array ໃຫມ່ທີ່ມີຄ່າດຽວກັນກັບ array 'ຕົ້ນສະບັບ'. ຢ່າງໃດກໍ່ຕາມ, ມັນຕ້ອງໄດ້ຮັບການພິຈາລະນາວ່າວິທີການນີ້ບໍ່ແມ່ນປະສິດທິພາບທີ່ສຸດສໍາລັບ array ຂະຫນາດໃຫຍ່ຍ້ອນວ່າມັນສາມາດສົ່ງຜົນໃຫ້ການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາຫຼາຍເກີນໄປແລະການຊ້າລົງຂອງລະຫັດ.
ກ່ຽວກັບການຂະຫຍາຍ arrays, ພວກເຮົາແນະນໍາໃຫ້ໃຊ້ຟັງຊັນ concat(). ວິທີການນີ້ຖືກນໍາໃຊ້ເພື່ອລວມສອງ array ຫຼືຫຼາຍກວ່ານັ້ນແລະສົ່ງຄືນ array ໃຫມ່. ໃຫ້ຈິນຕະນາການວ່າພວກເຮົາມີສອງ array 'array1' ແລະ 'array2' ທີ່ພວກເຮົາຕ້ອງການເຂົ້າຮ່ວມ. ດັ່ງນັ້ນ, ພວກເຮົາສາມາດໃຊ້ concat ດັ່ງຕໍ່ໄປນີ້:
var array1 = [1, 2, 3]; var array2 = [4, 5, 6]; var extended = array1.concat(array2);
ນີ້ຈະສົ່ງຄືນ array 'extended' ທີ່ມີຄ່າ [1, 2, 3, 4, 5, 6]. ໃຫ້ແນ່ໃຈວ່າຈື່ວ່າ, ໃນຂະນະທີ່ concat ແມ່ນດີເລີດສໍາລັບການລວມ array ຂະຫນາດນ້ອຍ, ມັນສາມາດບໍລິໂພກຄວາມຈໍາຫຼາຍໃນເວລາທີ່ຈັດການກັບ arrays ຂະຫນາດໃຫຍ່.
ຂ້ອຍແມ່ນ Sebastián Vidal, ວິສະວະກອນຄອມພິວເຕີທີ່ມີຄວາມກະຕືລືລົ້ນກ່ຽວກັບເຕັກໂນໂລຢີແລະ DIY. ຍິ່ງໄປກວ່ານັ້ນ, ຂ້ອຍເປັນຜູ້ສ້າງ tecnobits.com, ບ່ອນທີ່ຂ້ອຍແບ່ງປັນບົດສອນເພື່ອເຮັດໃຫ້ເຕັກໂນໂລຢີສາມາດເຂົ້າເຖິງໄດ້ຫຼາຍຂຶ້ນແລະເຂົ້າໃຈໄດ້ສໍາລັບທຸກຄົນ.