變數‎ > ‎

矢量 (流動陣列)

矢量(vector)即是流動陣列,可以輕鬆進行「附加」、「插入」、「移除」的資料結構。進行上述動作後,矢量會自動更新其餘資料的位置。
因此你可以用矢量輕鬆模擬到堆疊(stack, first in last out)、佇列(queue, first in first out),配合指標(pointer,即是 { } 的一種用法)更可以造出物件矢量~

下面例子使用vector.twf 函式庫事件
使用範例可以在vector.example.twf找到

下面說明都建基於此例:

 n 01 2  3 4
 myVec.{n} a b c d e
myVec.length = 5

1.附加
「附加」即是在矢量最後加上一個資料,並更新矢量長度

vector.name = "myVec"
vector.value = "f"
執行vector.push

結果:
矢量myVec
 n 01 2  3 4 5
  myVec.{n} a b c d e f
myVec.length = 6

2.插入
「插入」即是在矢量的某個位置i加上一個資料,將i之後的資料向後移一格並更新矢量長度

vector.name = "myVec"
vector.value = "xd"
vector.index = 2
執行vector.insert

結果:
矢量myVec
 n 01  23 4 5 6
  myVec.{n} a b xd c d e f
myVec.length = 7

3.移除
「移除」即是把矢量的某個位置i的資料移除,將i之後的資料向前移一格並更新矢量長度
vector.name = "myVec"
vector.index = 2
執行vector.erase

結果:
矢量myVec
 n 01 2 3 4 5
  myVec.{n} a b c d e f
myVec.length = 6

程式介面說明:
函式庫容量:15

 變數/事件 說明 範例 每次呼叫成本
(容量(x)/運算次數 O()看不懂不要緊)
 [變數]<vector_name>.<number> 取得矢量第n個資料 myVec.3 0 / 0
 [變數]<vector_name>.length 取得矢量長度 myVec.length 0 / 0
 [事件]vector.push 在矢量最後加上一個資料 vector.name = "myVec"
 vector.value = "f"
 執行vector.push
 1<=x<=3 / O(1)
  [事件]vector.insert 在矢量的某個位置i加上一個資料 vector.name = "myVec"
 vector.value = "xd"
 vector.index = 2
 執行vector.insert
 1<=x<=3 / O(n-i), n 是長度,i,是位置
 [事件]vector.erase 把矢量的某個位置i的資料移除 vector.name = "myVec"
 vector.index = 2
 執行vector.erase
 1<=x<=2 / O(n-i), n 是長度,i,是位置

進階 - 物件矢量
使用 { } 便可以定義物件矢量 (以物件作為資料的矢量),例如可以用於製作背包 (超易弄,笑
例:我們要儲存一種物件,這種物件是武器(weapon),而儲存武器的矢量叫背包(pack)。
一個武器有以下資料:
id: 武器種類編號
name: 名稱
damage: 傷害值

為每種武器建表
weapon
 id namedamage 
 0fist 
 1 knife15 
 2 gun25 

例:
weapon.0.name = fist;
weapon.0.damage = damage

玩家買了小刀
buy_weapon_id = 1;
vector.name = "pack";
vector.value = "weapon.%{brought_weapon_id}%";
call vector.push

現在小刀成為了矢量pack第一個物件

in order to get the first weapon in pack, what you need to do is "{pack.0}", which will return "weapon.1". For example first weapon's damage will be {pack.0}.damage, which is equivalent to weapon.1.damage, returning value 15, and it is just going back to the basic application of {}.

if now player buy gun, same thing, just change the value of buy_weapon_id:
buy_weapon_id = 2;
vector.name = "pack";
vector.value = "weapon.%{brought_weapon_id}%";
call vector.push

When deleting the first element in the pack, 
vector.index = 0;
call vector.delete;

now knife is deleted from vector pack

EASY! CONVENIENT! 
人FK,
2017年9月13日 上午8:30
v.1
人FK,
2017年9月13日 上午8:31
v.1
Author profile image
FK 人 (Facebook人)
Sep 13, 2017, 3:40:04 PM
温馨提示:附加的話,手動比用函式更省容量和運算時間