1. 程式人生 > >2.6 ruby的資料結構--陣列(Array)

2.6 ruby的資料結構--陣列(Array)

陣列是一個集合,但是不僅僅是數字的集合,可以是任何物件(String、 Integer、 Fixnum、 Hash、 Symbol 等物件)的集合。陣列的索引是從0開始的有序整數,可以通過正數索引或者負數索引來尋找陣列中的值,陣列中的值是有順序的。

1、建立陣列的方式

(1)直接建立
irb(main):018:0> arr = ["name",36,nil,23]
=> ["name", 36, nil, 23]
(2)快速定義字串陣列%w後面跟{},注意是大括號{},不是中括號[]
irb(main):019:0> arr = %w{2018-01-02 2018-01-03 2018-01-04}
=> ["2018-01-02", "2018-01-03", "2018-01-04"]

陣列的索引可以用正數或者負數表示,我做了一個圖,幫助大家理解。

索引圖示取值舉例:

irb(main):022:0> arr = ["a","b","c","d","e"]
=> ["a", "b", "c", "d", "e"]
irb(main):023:0> arr[0]
=> "a"
irb(main):024:0> arr[-1]
=> "e"

2、型別轉換

(1)陣列轉字串to_s、join

實際操作中,常用join方法,join方法比較靈活,可以將每個陣列元素用任意字元拼接起來,連成一個字串。

irb(main):020:0> arr = ["name",36,nil,23]
=> ["name", 36, nil, 23]
irb(main):021:0> arr.to_s
=> "[\"name\", 36, nil, 23]"
irb(main):022:0> arr.join
=> "name3623"
irb(main):023:0> arr.join(",")
=> "name,36,,23"
irb(main):024:0> arr.join("-")
=> "name-36--23"
(2)字串轉陣列split、eval

如果字串的形式同將陣列直接to_s之後的形式一樣,那麼可以用eval方法將字串轉換成陣列

irb(main):025:0> str1 = "name-36--23"
=> "name-36--23"
irb(main):026:0> str1.split("-")
=> ["name", "36", "", "23"]
irb(main):028:0> str2 = "[\"name\", 36, nil, 23]"
=> "[\"name\", 36, nil, 23]"
irb(main):029:0> eval(str2)
=> ["name", 36, nil, 23]

3、陣列操作

(1)陣列並集、合集、相加、相減
  • a&b 取a陣列和b陣列中元素的並集
  • a|b 取a陣列和b陣列中元素的合集
  • a+b 將a陣列和b陣列中的元素組合
  • a-b 從a陣列中去除與b陣列相同的元素
irb(main):034:0> a= [1,2,4,5]
=> [1, 2, 4, 5]
irb(main):035:0> b = [3,2,1]
=> [3, 2, 1]
irb(main):036:0> a & b
=> [1, 2]
irb(main):037:0> a | b
=> [1, 2, 4, 5, 3]
irb(main):038:0> a + b
=> [1, 2, 4, 5, 3, 2, 1]
irb(main):039:0> a - b
=> [4, 5]
(2)陣列與乘法的神奇組合

a * int 將a陣列乘整數,得到int個a陣列元素
a * str 將a陣列乘一個字串,和上面講的join方法差不多,返回一個由str間隔陣列元素的字串

irb(main):040:0> a = [3,2,1]
=> [3, 2, 1]
irb(main):041:0> a * 3
=> [3, 2, 1, 3, 2, 1, 3, 2, 1]
irb(main):042:0> a * "-"
=> "3-2-1"
irb(main):043:0> a * "Hello"
=> "3Hello2Hello1"
(3)arr << obj 將obj元素新增到陣列中

與方法+的區別:
1)+只適應於兩個陣列相加,不適應於陣列加字串。兩個陣列相加返回一個一層陣列,不會改變原先的陣列
2)<<後面可以接多種型別,實際應用中,多用於接字串,兩個陣列相加會返回一個二級陣列,會改變原先陣列的元素

irb(main):001:0> a= [1,2,4,5]
=> [1, 2, 4, 5]
irb(main):002:0> b = [3,2,1]
=> [3, 2, 1]
irb(main):003:0> c = "hello"
=> "hello"
#返回一個一層陣列
irb(main):004:0> a + b
=> [1, 2, 4, 5, 3, 2, 1]
#c為一個字串,與陣列用+符號連線會報錯
irb(main):005:0> a + c
TypeError: no implicit conversion of String into Array
	from (irb):5
#a陣列在進行+操作之後,陣列中元素沒有變化
irb(main):006:0> a
=> [1, 2, 4, 5]
#返回一個二層陣列(即數組裡麵包含了陣列)
irb(main):007:0> a << b
=> [1, 2, 4, 5, [3, 2, 1]]
irb(main):008:0> a << c
=> [1, 2, 4, 5, [3, 2, 1], "hello"]
#進行<<操作後,陣列中的元素髮生了變化
irb(main):009:0> a
=> [1, 2, 4, 5, [3, 2, 1], "hello"]
(4)== 兩個陣列比較,相同返回true,否則返回false。陣列相同說明陣列中元素個數,順序,內容都相等
irb(main):010:0> [1,2,3] == [1,2,3]
=> true
irb(main):011:0> [1,2,3] == [1,2]
=> false
irb(main):012:0> [1,2,3] == [3,2,1]
=> false
(5)arr[index] 返回陣列中index索引對應的值,如果在陣列中沒有index索引,則返回nil
  • arr[start,length] 從start索引開始,取length個值
  • arr[start…end]取索引為start到索引為end對應的值,包含索引為end的值
  • arr[start…end]取索引為start到索引為end對應的值,不包含索引為end的值
#定義一個數組
irb(main):013:0> arr = [5,6,7,8,9,10,1,2,3,4]
=> [5, 6, 7, 8, 9, 10, 1, 2, 3, 4]
irb(main):014:0> arr[0]
=> 5
#取索引為3的數,即第四個值
irb(main):015:0> arr[3]
=> 8
#從索引3開始取兩個值
irb(main):017:0> arr[3,2]
=> [8, 9]
#從索引3開始取7個值
irb(main):018:0> arr[3,7]
=> [8, 9, 10, 1, 2, 3, 4]
#取索引為3到索引為7對應的值,包含索引為7的值
irb(main):020:0> arr[3..7]
=> [8, 9, 10, 1, 2]
#取索引為3到索引為7對應的值,不包含索引為7的值
irb(main):021:0> arr[3...7]
=> [8, 9, 10, 1]
(6)arr.length 返回arr陣列元素個數
irb(main):023:0> a = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
irb(main):024:0> a.length
=> 5
(7)each 遍歷陣列
  • arr.each 迭代器,用來遍歷陣列,返回每個陣列的值
  • arr.each_with_index 遍歷陣列的返回,每個陣列的值以及對應的索引
irb(main):026:0> [1,2,3,4,5].each {|x| puts "此次返回的值為:" + x.to_s}
此次返回的值為:1
此次返回的值為:2
此次返回的值為:3
此次返回的值為:4
此次返回的值為:5
=> [1, 2, 3, 4, 5]
#用do...end包裹的塊
irb(main):028:0> [1,2,3,4,5].each_with_index do |x,index|
irb(main):029:1*   puts "#{x}在陣列中的索引是#{index}"
irb(main):030:1> end
1在陣列中的索引是0
2在陣列中的索引是1
3在陣列中的索引是2
4在陣列中的索引是3
5在陣列中的索引是4
=> [1, 2, 3, 4, 5]
(8)delete 刪除元素
  • arr.delete(obj) 根據陣列的值刪除陣列元素。陣列中有obj元素,返回該元素,陣列自身會改變,陣列中沒有obj元素,返回nil
  • arr.delete_at(index) 根據陣列的索引刪除陣列元素。陣列中有index索引,返回改索引對應的值,陣列自身會改變,陣列中沒有index索引,返回nil
irb(main):043:0> arr1 = [1,1,2,3,1,4,5]
=> [1, 1, 2, 3, 1, 4, 5]
#刪除值為1的元素
irb(main):044:0> arr1.delete(1)
=> 1
#arr1陣列發生了變化,值為1的元素被全部刪除
irb(main):045:0> arr1
=> [2, 3, 4, 5]
#arr1陣列中沒有值為8的元素,返回nil
irb(main):046:0> arr1.delete(8)
=> nil
#重新定義一個數組arr2
irb(main):047:0> arr2 = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
#刪除索引為2的元素
irb(main):048:0> arr2.delete_at(2)
=> 3
#arr2陣列傳送了變化,原先索引為2的元素以為刪除,現在索引為2的元素對應的值為4
irb(main):049:0> arr2
=> [1, 2, 4, 5]
#arr2陣列中沒有索引為8的元素,返回nil
irb(main):050:0> arr2.delete_at(8)
=> nil
(9)arr.empty? 判斷陣列是否為空
irb(main):052:0> arr1 = []
=> []
irb(main):053:0> arr2 = [nil]
=> [nil]
irb(main):054:0> arr3 = [1,2,3]
=> [1, 2, 3]
irb(main):055:0> arr1.empty?
=> true
#nil也相當於一個數組元素,所有arr2陣列不為空
irb(main):056:0> arr2.empty?
=> false
irb(main):057:0> arr3.empty?
=> false
(10)取陣列前面或者後面的值
  • arr.first 取陣列第一個值,即索引為0的值
  • arr.first(n) 取陣列前n個值
  • arr.last 去陣列最後一個值
  • arr.last(n) 取陣列最後n個值
irb(main):061:0> arr = [1,2,3,4,5,6,7,8]
=> [1, 2, 3, 4, 5, 6, 7, 8]
irb(main):062:0> arr.first
=> 1
irb(main):063:0> arr.first(3)
=> [1, 2, 3]
irb(main):064:0> arr.last
=> 8
irb(main):065:0
            
           

相關推薦

2.6 ruby資料結構--陣列(Array)

陣列是一個集合,但是不僅僅是數字的集合,可以是任何物件(String、 Integer、 Fixnum、 Hash、 Symbol 等物件)的集合。陣列的索引是從0開始的有序整數,可以通過正數索引或者負數索引來尋找陣列中的值,陣列中的值是有順序的。 1、建立陣列的方式 (1)直接

js中資料結構陣列Array、對映Map、集合Set、物件、JSON

全棧工程師開發手冊 (作者:欒鵬) js中資料結構 js中原生自帶的資料結構比較簡單,主要有陣列Array、對映Map、集合Set。我們可以根據這三個基本資料結構實現我們其他想要的資

2.6使用二維陣列儲存學生的資料,包括學號、姓名、作業系統成績、Java成績、高數成績、總分;一行儲存一個學生的資料;要求輸入若干學生的資料,求出總分;然後按照總分由高到低重新排列;輸出排序後的結果

摩爾的Java學習筆記2.6 第二週作業: 1、實現將一組整數進行升序排列; 2、用二維陣列實現,5個學生4門課程的總分和平均分的統計工作; 3、列印八行八列楊輝三角,開頭

資料結構——陣列2)在有序數列中二分查詢

二分查詢的前提要求陣列有序, 查詢思想:每次將待查詢元素k和陣列中間位置mid元素對比,若相等,則查詢成功;若mid元素小於k,則k在陣列後半部分;若mid元素大於k,則在陣列前半部分。然後繼續以此方法搜尋。 實現方法包括:非遞迴法、遞迴法。 #inclu

2015年大二上-資料結構-陣列與廣義表(2)-4.下三角矩陣的壓縮儲存及基本運算

/* *Copyright (c) 2014,煙臺大學計算機學院 *All rights reserved. *檔名稱:Annpion.cpp *作者:王耀鵬 *完成日期:2015年12月16日 *版本號:v1.0 * *問題描述:下三角矩陣的壓縮儲存及基本運算 *輸入描述

2015年大二上-資料結構-陣列與廣義表(2)-3.上三角矩陣的壓縮儲存及基本運算

/* *Copyright (c) 2014,煙臺大學計算機學院 *All rights reserved. *檔名稱:Annpion.cpp *作者:王耀鵬 *完成日期:2015年12月16日 *版本號:v1.0 * *問題描述:上三角矩陣的壓縮儲存及基本運算 *輸入描述

java中的資料結構——陣列

在Java中,陣列非常常用,大部分的資料結構也是基於陣列來實現的。 與陣列有關的話題: 1.在java中,宣告一個數組過程中,是如何分配記憶體的? A. 當宣告陣列型別變數時,為其分配了(32位)引用空間,由於未賦值,因此並不指向任何物件; B.當建立了一個數組物件(也就是new出來的)並將

資料結構 - 陣列

1.陣列基礎   陣列最一種存放資料的線性資料結構 ,最原始的陣列是一種靜態陣列,需要宣告陣列的容量,一旦new出來陣列物件大小不可改變,可以通過索引來進行資料的增刪改查。我們可以通過對靜態陣列的二次封裝來進行改進成動態陣列。 *陣列最大的優點:快速查詢。 *陣列最好用於“索引有語意”的情況

6.1-資料結構&演算法-堆疊與佇列

----------------- 第七課  堆疊與佇列 一、資料結構的基本概念 1.邏輯結構 1)集合結構(集):結構中的元素除了同屬一個集之外,沒有任何聯絡。 2)線性結構(表):結構中的元素具有一對一的前後關係。

資料結構-陣列排序-二路歸併-迴圈實現-C語言

/* * * 歸併排序-迴圈實現 * * */ #include <stdio.h> #include <stdlib.h> void Merge(int Element[],int TmpA[],int L,int R,int RightEnd){

資料結構-陣列排序(冒泡 選擇 插入 歸併(合併有序陣列))-C語言

氣泡排序 選擇排序 插入排序 歸併排序(合併有序陣列) // // Created by 範興國 on 2017/9/24. // /* * * 陣列排序 氣泡排序 選擇排序 插入排序 二路歸併合併陣列 * * * */ #include &

6.4-資料結構&演算法-模板/函式模板/類模板/特化

一、為什麼要有模板? 將型別引數化,可以實現演算法與型別的分離,編寫針對型別更加抽象的函式或者類。   二、函式模板 通用定義: template<typename 型別形參1, ...> 返回型別 函式模板名 (形參表) { ...

Java資料結構-陣列解析及類封裝自定義陣列實現

概念: 陣列是Java資料結構中最基本的資料,是儲存 一組長度固定的 同資料型別的集合。 優點: 插入快:對於無序陣列,只需要在陣列末尾增加資料即可。但對於有序陣列,需要查詢到固定的位置,再插入資料,相對無序陣列 結構簡單 缺點: 根據元素值查

回顧資料結構-陣列佇列

  在上篇的陣列實現類基礎下實現佇列。 佇列就像排隊吃飯。先來的先打飯,打完就走。後來的排在隊伍後面,當你排到隊伍第一個時,就可以打飯走人了。 貼程式碼 package duilie; public interface Queue<E> { int get

回顧資料結構---陣列

沒啥可說的  直接上程式碼     package shuzu; public class Array<E> { private E[] data; private int size; //建構函式 傳入容量capa

資料結構---------陣列

1.Java陣列介紹 概念:同一種類型的集合,其實陣列就是一個容器 使用優點:可以自動給陣列中的元素從0開始編號,方便操作這些元素。 宣告的方式: 元素型別[] 陣列名=new 元素型別[元素個數或陣列長度] 例:int[] arr=new int[5

JAVA資料結構 陣列

一  .   陣列 1.陣列,可以說是JAVA中最常見和簡單的資料結構,但是,萬不可小瞧了資料,古書有言:大道至簡。 2.陣列基礎 1)陣列優點:根據下標快速查詢; 2)陣列最好應用於“索引有語意”的情況,例如陣列int[] scores代表全班同學的成績,score

6---核心資料結構

關於連結串列,以下說法正確的是 ( ) A 需經常修改線性表L中的結點值適合採用鏈式結構 B 需不斷對線性表L進行刪除插入適合採用鏈式結構 C 帶頭結點的單鏈表,在表的第一個元素之前插入一個新元素與連結串列長度無關 D 刪除單鏈表中的最後一個元素,與連結串列長度無關 分析:A:

簡單資料結構---陣列實現棧

/* * File name : LinkList.cpp * Function : 陣列棧的C++實現 * Created on : 2016年4月20日 * Author : [email protected] * Copyright : 歡迎

資料結構陣列與串

知識要點: 串的基本概念、串的儲存結構和相關的操作演算法; 陣列的儲存結構,在順序儲存的情況下,陣列元素與儲存單元的對應關係; 稀疏矩陣的儲存結構和特點以及基本操作。 字串匹配演算法(例如KMP演算法)。 串的定義:由一個或多個字元組成的有限序列;內字元的個數稱之為