分類: Octave

Octave 資料容器(Data Containers)

字串巢狀陣列(Cell Arrays of Strings)

巢狀陣列常用於儲存多個字串,字元陣列亦可一次儲存多個字串,但其每個字串的長度必須相等,而巢狀陣列則沒有這樣的限制,因此在儲存多個不同長度的字串時,建議使用巢狀陣列。在某些情況下在運算時會需要以字元陣列來儲存字串,Octave 中提供了一些函數可以將資料在巢狀陣列與字元陣列之間轉換:char()strvcat() 函數可以將巢狀陣列轉換為字元陣列(請參考連接字串),而 cellstr() 函數可以將字元陣列轉換為巢狀陣列,例如:

a = ["hello"; "world"];
c = cellstr (a)

輸出為

c =

{
  [1,1] = hello
  [2,1] = world
}
cellstr (string)

cellstr(string) 函數會將字串陣列 string 轉換為巢狀陣列。

在 Octave 中大部分的字串操作函數都支援字串巢狀陣列,因此使用巢狀陣列的另外一個優點就是可以直接套用這些字串操作函數,例如可以使用 strcmp() 函數輸入字串巢狀陣列一次比較多個字串:

c = {"hello", "world"};
strcmp ("hello", c)

strcmp() 函數的參數中若有一個是字串巢狀陣列時,其會將巢狀陣列中的每一個字串與另外一個字串做比較,輸出為

ans =

   1   0

以下的字串操作函數都支援巢狀陣列:char()strvcat()strcat() (請參考連接字串)、 strcmp()strncmp()strcmpi()strncmpi() (請參考字串比較)、 str2double()strtrim()strtrunc()strfind()strmatch()regexp()regexpi() (請參考字串操作)與 str2double() (請參考字串轉換)。

iscellstr (cell)

iscellstr(cell) 函數可以判斷巢狀陣列 cell 中所有的元素是否都是字串。

[idxvec, errmsg] = cellidx (listvar, strlist)

cellidx(listvar, strlist) 函數會傳回 strlist 中所有的字串在 listvar 中的位置索引,第一個傳回值 idxveclistvar 的索引向量,若 strlist 中所列的字串不在 listvar 之中,則會將錯誤訊息傳回至第二個參數 errmsg 中,若只有指定一個輸出參數,則會將錯誤訊息輸出至螢幕上,並離開程式。例如:

a = {"ABC", "123", "abc", "456", "DEF"};
b = {"123", "456"};
cellidx(a, b)

輸出為

ans =

   2
   4

strlistlistvar 兩個參數都可以指定為字元陣列,若指定為字元陣列則每個字串在搜尋前會先以 deblank() 函數將多餘的空白去除。

Page: 1 2 3 4 5 6 7 8 9 10 11 12

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang
標籤: 數學

Recent Posts

[美善品] 客家花生麻糬製作教學

本篇介紹如何使用美善品料理機,...

4 年 ago

Bio-Formats 生醫影像讀取、轉換函式庫使用教學

本篇介紹如何使用 Bio-Fo...

4 年 ago

創見 USB 隨身碟壞掉維修過程記錄

本篇記錄我的創見 USB 隨身...

4 年 ago

[美善品] 堅果黑芝麻、紅豆包子製作記錄

本篇記錄我用美善品料理機,自己...

4 年 ago

[美善品] 黑芝麻餡料製作記錄

本篇記錄我今天用美善品料理機,...

4 年 ago