Source From Here
Preface
在Ruby中,陣列為有序的物件集合,具有索引特性,長度可以變動。要建立陣列,可以使用 [] 實字,串列中每個元素,使用逗號 , 區隔。例如:
陣列型態
使用 [] 建立陣列物件,為 Array 的實例,若沒有指定任何元素,長度為 0。你可以對陣列使用 push(相當於使用 << 操作)、pop、last 方法對末端進行附加、取出、讀取元素,也就是進行堆疊(Stack)操作。使用 unshift、shift、first 對前端進行加入、取出、讀取元素,也就是進行佇列(Queue)操作。可以使用 insert、delete、reverse 等方法進行安插、刪除、反轉等動作,使用include? 測試元素是否在陣列中,使用 length 取得陣列長度。
果要對陣列中的元素進行排序,可以使用 sort 方法。例如:
sort 方法可以自行指定排序方式,上例中第二個 sort 範例,{} 區塊中會傳入陣列中兩元素給 a、b 參考,你要傳回 0、大於0 或 小於0,表示順序上 a 等於 b、a 大於 b 及 a 小於 b,<=> 操作左邊若大於右邊會傳回 1,等於右邊會傳回0,小於右邊會傳回 -1,在 Ruby 區塊中,最後一個運算的結果會作為傳回值,因此第二個 sort 範例就完成陣列中反序排列。
如果要附加多個元素,則可以使用 + 操作,注意與 << 操作的不同。例如:
可以對陣列使用 *,指定加倍陣列的內容,注意對每個元素是進行淺層複製(Shallow copy):
* 也可以用來拆解陣列,如果你要將陣列中的元素一次指定給數個變數時會很方便:
實際上可以看到,如果只是指定給變數,並不需要特別加上 *,之後會看到,如果要將陣列指定給 方法 上的參數,才需要特別指定 *。
* 也可以用來收集資料為陣列,例如:
實際上要收集資料為陣列,只要在等號右邊以逗號區隔就可以了,結合以上說明,在Ruby中要交換變數,只要這麼作:
因為=右邊若有逗號區隔的資料,會收集為陣列,陣列若指定給右邊變數,會拆解並分配給各個變數,因而組成了簡單的交換變數語法。
在 Ruby 中,陣列可以進行集合(Set)運算,使用 & 可作交集運算,使用 | 可作聯集運算,使用 - 作減集運算。例如:
陣列不提供 XOR 運算,不過可以自己製作一個:
你也可以直接使用 [] 指定索引來取得元素、修改元素甚至安插元素,索引可以是負數,也可以進行切片(Slice)運算。例如:
[n..m]可 指定起始索引與結束索引,且包括結束索引以取得元素,如果結束索引超出了陣列範圍,就是直接取到最後一個索引元素, [n...m]可 指定起始索引與結束索引,但包括結束索引以取得元素(實際上 n..m 或 n...m 建立了 Range 實例,之後會再說明)。[n, length]可指定起始索引與長度取得元素,如果長度超出了剩餘長度,就是直接取到最後一個元素。[n..m]、[n...m]或[n, length]右邊接上=,表示作取代的動作,如果指定了[n..0]、[n...0]或[n, 0],則是技巧性地作了安插的動作。
你也可以使用 Array.new 方式建立陣列。例如:
Array.new 第一個參數為陣列長度,第二個為每個索引預設元素,如果沒有指定則預設為nil,注意 Array.new(5, [1, 2, 3]) 的陷阱,實際上五個索引都會參考至同一個 [1, 2, 3] 物件,如果你希望五個索引參考至不同的陣列物件,必須如下:
使用 Array.new 時,區塊中最後一個運算的結果會作為傳回值,上例中,會執行五次區塊內容,每次依陣列實字(Array literal)產生一個新的 [1, 2, 3] 陣列,因此五個索引就會參考不同的陣列物件。如果想得知目前是要建立第幾個索引的元素,可以如下:
如果想循序走訪元素,可以有幾個方式:
如果要建立字串陣列,有個方便的 %w 可以使用。例如:
用來包括元素內容的符號,不一定要用[],也可以使用自己想用的符號,以不與字串中字元重複為原則。例如:
Supplement
* tutorialpoint - Arrays
* Rubylearning.com - Arrays
This is a blog to track what I had learned and share knowledge with all who can take advantage of them
標籤
- [ 英文學習 ]
- [ 計算機概論 ]
- [ 深入雲計算 ]
- [ 雜七雜八 ]
- [ Algorithm in Java ]
- [ Data Structures with Java ]
- [ IR Class ]
- [ Java 文章收集 ]
- [ Java 代碼範本 ]
- [ Java 套件 ]
- [ JVM 應用 ]
- [ LFD Note ]
- [ MangoDB ]
- [ Math CC ]
- [ MongoDB ]
- [ MySQL 小學堂 ]
- [ Python 考題 ]
- [ Python 常見問題 ]
- [ Python 範例代碼 ]
- [心得扎記]
- [網路教學]
- [C 常見考題]
- [C 範例代碼]
- [C/C++ 範例代碼]
- [Intro Alg]
- [Java 代碼範本]
- [Java 套件]
- [Linux 小技巧]
- [Linux 小學堂]
- [Linux 命令]
- [ML In Action]
- [ML]
- [MLP]
- [Postgres]
- [Python 學習筆記]
- [Quick Python]
- [Software Engineering]
- [The python tutorial]
- 工具收集
- 設計模式
- 資料結構
- ActiveMQ In Action
- AI
- Algorithm
- Android
- Ansible
- AWS
- Big Data 研究
- C/C++
- C++
- CCDH
- CI/CD
- Coursera
- Database
- DB
- Design Pattern
- Device Driver Programming
- Docker
- Docker 工具
- Docker Practice
- Eclipse
- English Writing
- ExtJS 3.x
- FP
- Fraud Prevention
- FreeBSD
- GCC
- Git
- Git Pro
- GNU
- Golang
- Gradle
- Groovy
- Hadoop
- Hadoop. Hadoop Ecosystem
- Java
- Java Framework
- Java UI
- JavaIDE
- JavaScript
- Jenkins
- JFreeChart
- Kaggle
- Kali/Metasploit
- Keras
- KVM
- Learn Spark
- LeetCode
- Linux
- Lucene
- Math
- ML
- ML Udemy
- Mockito
- MPI
- Nachos
- Network
- NLP
- node js
- OO
- OpenCL
- OpenMP
- OSC
- OSGi
- Pandas
- Perl
- PostgreSQL
- Py DS
- Python
- Python 自製工具
- Python Std Library
- Python tools
- QEMU
- R
- Real Python
- RIA
- RTC
- Ruby
- Ruby Packages
- Scala
- ScalaIA
- SQLAlchemy
- TensorFlow
- Tools
- UML
- Unix
- Verilog
- Vmware
- Windows 技巧
- wxPython
訂閱:
張貼留言 (Atom)
[Git 常見問題] error: The following untracked working tree files would be overwritten by merge
Source From Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 # git clean -d -fx 方案2: 今天在服务器上 gi...
-
前言 : 為什麼程序管理這麼重要呢?這是因為: * 首先,本章一開始就談到的,我們在操作系統時的各項工作其實都是經過某個 PID 來達成的 (包括你的 bash 環境), 因此,能不能進行某項工作,就與該程序的權限有關了。 * 再來,如果您的 Linux 系統是個...
-
屬性 : 系統相關 - 檔案與目錄 語法 : du [參數] [檔案] 參數 | 功能 -a | 顯示目錄中個別檔案的大小 -b | 以bytes為單位顯示 -c | 顯示個別檔案大小與總和 -D | 顯示符號鏈結的來源檔大小 -h | Hum...
-
來源自 這裡 說明 : split 是 Perl 中非常有用的函式之一,它可以將一個字串分割並將之置於陣列中。若無特別的指定,該函式亦使用 RE 與 $_ 變數 語法 : * split /PATTERN/,EXPR,LIMIT * split /...
沒有留言:
張貼留言