[閒聊] 陣列.slice()

看板 Mud_Sanc
作者
時間
留言 5則留言,2人參與討論
推噓 1  ( 1推 0噓 4→ )
我不太清楚是否有其它做法,但是至少它是可以 work 的。 首先若以 sanc 來說,如果做如下宣告 mixed tmps=({1,2,({3,4})}); mixed tmps1,tmps2; tmps1=tmps; tmps2=tmps; tmps1[2][1]=5; write("tmps1="+identify(tmps1)+"\ntmps2="+identify(tmps2)+"\n"); 它的執行結果 tmps1={1,2,{3,5}} tmps2={1,2,{3,5}} 在 javascript 裡頭,如果用相同的寫法,當 tmps1 的值變更時,tmps2 的值也會跟著變更。 javascript 的場合,我後來使用以下的寫法 tmps1=tmps.slice(); // 將 tmps 裡面的東西 copy 給 tmps1 tmps2=tmps.slice(); // 將 tmps 裡面的東西 copy 給 tmps2 仍是不行,這是因為 tmps 裡面有一個子陣列 [3,4],必須連這個也使 用 slice copy 才行,所以後來採用的土法煉鋼做法: n=tmps.length; tmps1=new Array(n); tmps2=new Array(n); for(i=0;i<tmps.length;i++) { tmps1[i]=tmps[i].slice(); tmps2[i]=tmps[i].slice(); } 這樣 tmps1 及 tmps2 才會是互相獨立的個體,有幾個子陣列就得這樣 做或採用別的寫法,來確保每一個元素都是複製過去的而非只是"指向" ,指向的結果就是當元素改變時,指向它的另一個陣列的元素也會跟著 改變。 ============================================================== 最近就是都在公司搞這些東西,算是超前部署,當明年突然被要求要交 什麼什麼的時候,有東西可以馬上 show 出來,主要是參考以下的電影 https://www.youtube.com/watch?v=dUKWDxKAlk4
https://www.youtube.com/watch?v=jnzzKCUdvG8
電影裡的 fortran 編程其實也不是什麼高深的學問,跟 javascript在 我公司、我單位的利用大致差不多,但是,javascript 實際上是相當 好用的東西,即便是像我這樣自學且只是會一點皮毛這樣。 因為它一直很好用,在我的工作上,所以我一直在寫相關的東西。那經 過長時間的驗證,coding 改用 notepad++ 並改為黑底綠字後,已經沒 再出現眼睛神經不正常抽動的情況。 只是目前還不確定會不會再 coding sanc。該寫的系統都寫了,系統寫 好後要讓它 work 就得寫副本及建資料,這部份我就不行了,說到底只 有一個人要發展真的挺困難的,除非我能全心全力把時間跟精力都用在 sanc,但目前光以工作來說,我的工作環境就比以前複雜了。 近況大概是這樣,藉這篇順便。 Laechan --
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.33.66.104 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/mud_sanc/M.1603337953.A.55F.html
1Fpandamilktea: 如果有用到jquery可以用extend的方式複製出來 10/23 10:11
2Ftypers: {1,2,[3,4]} LPC有這種語法? 10/23 22:14
筆誤。 ※ 編輯: laechan (114.33.66.104 臺灣), 10/24/2020 22:55:59
3Ftypers: {1,2,{3,4}} 也沒有這種語法吧 10/25 03:08
4Ftypers: 照你的語意,lpc中tmps1會等於tmps2 10/25 03:10
5Ftypers: 你描述的狀態,大概是PHP才會出現吧 10/25 03:12
拍謝,太久沒 coding 忘光了。已修正部份內容。 > call here;test_array tmps1=({ 1, 2, ({ 3, 5 }) }) tmps2=({ 1, 2, ({ 3, 5 }) }) 照我的語意,LPC 中若令 tmps1=tmps, tmps2=tmps, 則更動 tmps1 內 的元素值,不會影響 tmps2,不過我剛實測的結果,會影響。 跟我的記憶不一樣,呵...要撥個時間複習了。 ※ 編輯: laechan (114.33.66.104 臺灣), 10/25/2020 12:20:43