作者laechan (揮淚斬馬雲)
看板mud_sanc
標題[閒聊] 陣列.slice()
時間Thu Oct 22 11:39:10 2020
我不太清楚是否有其它做法,但是至少它是可以 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://webptt.com/m.aspx?n=bbs/mud_sanc/M.1603337953.A.55F.html
1F:推 pandamilktea: 如果有用到jquery可以用extend的方式複製出來 10/23 10:11
2F:→ typers : {1,2,[3,4]} LPC有這種語法? 10/23 22:14
筆誤。
※ 編輯: laechan (114.33.66.104 臺灣), 10/24/2020 22:55:59
3F:→ typers : {1,2,{3,4}} 也沒有這種語法吧 10/25 03:08
4F:→ typers : 照你的語意,lpc中tmps1會等於tmps2 10/25 03:10
5F:→ typers : 你描述的狀態,大概是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