1. 程式人生 > >scala學習(陣列,元組)

scala學習(陣列,元組)

1. 陣列相關操作

  • 如果需要一個長度不變的陣列,可以用Scala中的Array,提供初始值時不要使用new
val nums = new Array[Int](10) //10個整數的陣列,所有元素初始化為0
val s = Array("hello","world") //提供初始值時,不需要使用new
  • 對於長度按需要變化的陣列,可以使用Scala中的ArrayBuffer
import scala.collection.mutable.ArrayBuffer
val a = new ArrayBuffer[Int]      //一個空的緩衝陣列,準備存放整數
b += 1                            //用+=在緩衝陣列尾部新增元素
b += (1,2,3) //在尾端新增多個元素,用括號括起來 b ++= Array(8,13,21) //用++=操作符追加任何集合 b.trimEnd(5) //移除最後5個元素 b.insert(2,6) //在下標為2元素之前插入6,這種操作並不高效 b.remove(2) //移除下標為2的元素 b.remove(2,3) //移除下標為2的元素以及他後面的2個元素,一共3個元素
  • 有時需要構建一個Array,但不知道最終需要裝多少元素,可以先構建一個緩衝陣列,然後呼叫b.toArray。呼叫a.toBuffer可以將一個數組a轉化成一個緩衝陣列
  • 遍歷陣列和緩衝陣列,可以用相同的程式碼處理這兩種資料結構
 for (i <- 0 until a.length){
    ...
 }

如果想要每兩個元素一跳

 for (i <- 0 until (a.length,2)){
    ...
 }

如果要從陣列的尾端開始

 for (i <- (0 until a.length).reverse){
    ...
 }
  • 陣列轉換,從一個數組或緩衝陣列出發,以某種方式對它進行轉換是很簡單的。這些轉換動作不會修改原始陣列,而是產生一個全新的陣列。
 val a = Array(2,3,5,7,11)
 val result = for (i <- a) yield 2 * i //result是Array(4,6,10,14,22)

for (...) yield迴圈建立了一個型別與原始集合相同的新集合。從陣列出發,得到的是另一個數組,從緩衝陣列出發,得到的是另一個緩衝陣列
- 常用演算法
sum方法,元素型別必須是數值型別

Array(1,7,2,9).sum  //ArrayBuffer同樣適用

max和min方法:輸出陣列或緩衝陣列中最大和最小的元素,元素必須支援比較操作
sorted方法:將陣列或緩衝陣列排序並返回經過排序的陣列或緩衝陣列,不會修改原始版本。sortWith方法,可以提供比較函式

val b = ArrayBuffer(1,7,2,9)
val bSorted = b.sorted        //bSorted是ArrayBuffer(1,2,7,9)
val bDec = b.sortWith(_ > _)  //ArrayBuffer(9,7,3,1)
  • 顯示陣列和緩衝陣列的內容,可以用mkString方法,它允許你指定元素之間的分隔符
val a = Array(1,2,7,9)
a.mkString(" and ") //"1 and 2 and 7 and 9"
  • 多維陣列,通過陣列的陣列來實現,Double的二維陣列型別為Array[Array[Double]],構造這樣一個數組可以用ofDim方法
val matrix = Array.ofDim[Double](3,4) //3行,4列

2. 對映與元組

  • 對映是鍵/值 對偶 的集合,對偶是一個n = 2的元組
  • 構造對映
    不可變的Map[String,Int]
val scores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
val scores = Map(("Alice" , 10) , ("Bob" , 3) , ("Cindy" , 8))

可變對映

val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
  • ()來查詢某個鍵對映的值
val bobsScore = scores("Bob")

如果對映並不包含請求中是用的鍵,則會丟擲異常

  • 檢查對映中是否有某個指定的鍵,可以用contains方法
  • 更新對映中的值。在可變對映中,你可以更新某個對映的值,或者新增一個新的對映關係
scores("Bob") = 10                   //更新鍵"Bob"對應的值,假設scores是可變的
scores("Fred") = 7                   //增加新的鍵/值對偶到scores
scores += (("Bob", 10) , ("Fred",7)) //增加多個關係用+=操作符
scores -= "Alice"                    //移除某個鍵和對應的值用-=操作符

對於不可變對映

val newScores = scores + (("Bob",10) , ("Fred",1)) //更新Bob,增加Fred
scores = scores - "Alice"                          //移除某個鍵
  • 迭代對映
    遍歷對映中所有的鍵值對偶
for ((k,v) <- 對映) {
    處理k和v
}

訪問鍵或值

scores.keySet   //一個類似Set("Bob" , "Alice")的集
scores.values   

反轉一個對映

for ((k,v) <- 對映) yield (v,k)
  • 元組(tuple)
    元組的值是通過將單個的值包含在圓括號中構成的,例如:
val t = (1,3.14,"Fred")  //型別為Tuple(Int,Double,java.lang.String)

用_1,_2,_3訪問其組元,元組的個組元從1開始

  • 元組可以用於函式需要返回不止一個值的情況
  • zip方法將多個值綁在一起
val symbols = Array("<","-",">")
val counts =Array(2,10,1)
val pair = symbols.zip(counts)  //輸出Array(("<",2),("-",10),(">",2))

相關推薦

scala學習(陣列)

1. 陣列相關操作 如果需要一個長度不變的陣列,可以用Scala中的Array,提供初始值時不要使用new val nums = new Array[Int](10) //10個整數的陣列,所有元素初始化為0 val s = Array("hello

Scala學習筆記之`Tuple`

Scala學習筆記之元組Tuple 元組是Scala提供的一種特殊的資料結構,或者說是一塊語法糖,它允許多個不同型別的元素組合在一起被使用,如下所示: val tup = (1, 3.14, "元組", true) 這是一個四元組,由4個元素組成。Scal

Scala 陣列(Array)列表(List)(Tuple)集(Set)對映(Map)迭代器(Iterator)

1. 陣列(Array) 陣列是程式設計中經常用到的資料結構,一般包括定長陣列和變長陣列。本教程旨在快速掌握最基礎和常用的知識,因此,只介紹定長陣列。 定長陣列,就是長度不變的陣列,在Scala中使用Array進行宣告,如下: val intValue

學校學習ios教程筆記第四節swift中可變陣列和不可變陣列以及的概念與操作

// //  main.swift //  Swift第四節 // //  Created by lanou on 16/10/24. //  Copyright (c) 2016年 lanou. A

<python全棧開發基礎>學習過程筆記【6d】列表字典知識點復習

ima 技術分享 筆記 python nbsp .com 復習 png cnblogs 、 <python全棧開發基礎>學習過程筆記【6d】列表,字典,元組,知識點復習

大資料之scala(二) --- 對映簡單類內部類物件ObjectIdea中安裝scala外掛trait特質[介面]包和包的匯入

一、對映<Map> ----------------------------------------------------- 1.建立一個不可變的對映Map<k,v> ==> Map(k -> v) scala> val map

學習筆記四 檔案讀寫集合函式

一、檔案讀寫幾種模式總結: 讀模式: r 開啟不存在的檔案會報錯、不能寫(不能呼叫write方法),可以讀(能呼叫read方法) 寫模式: w # 1、開啟不存在的檔案,會新建一個檔案,但每次開啟都會清空原有檔案內容       # 2、不能讀(不能呼叫read方法),可以寫(能呼叫write方法)

Python基礎學習!容器列表字典與集合!(1)

本文是容器 列表知識的筆記! 元組&列表 元組:是不可變的,值被固定元組中就不可以再進行改變! 列表:是可變的,意味著可以隨意插入或者刪除其中的元素 函式呼叫格式: 列表名.函式名(引數)#元素的話要帶著單引號!大多是這樣! ‘,’.join(a)這個連線函式,用法

python學習篇04 - 列表

1、列表       定義:能裝物件的物件     在python中使用[] 來描述列表,內部元素用逗號隔開,對資料型別沒有要求。     列表存在索引和切片,和字串的操作是一樣的  

Python入門學習筆記————09(集合字典)

關於元組的函式 以下看程式碼 In [5]:   #len:獲取元組長度1 t = (1,2,3,4,4) len(t) Out[5]: 5 In [6]:   #max,min:最大值,最小值 #如果

Python入門學習筆記————08(list函式

#傳值與傳地址的區別 #對於簡單的數值,採用傳值的操作,即在函式內的操作不影響外面的變數 #對複雜的變數,採用傳遞地址的操作,此時進行的操作即是對函式本身的操作 ​ def a(n): n[2]=300 print(n) return None

Python學習之路(2)——標準資料型別續——列表字典集合

0.Python之禪 可以通過在python直譯器中輸入import this 檢視python應該注意的一些規範與原則,如下: 1.列表 元素用方括號括起,元素之間用逗號隔開,如[1,2,3,4] 三大特點: (1)異構性 列表裡想裝啥就裝啥,即:他可以包含不同種類、

每天學習一算法系列(4) (輸入一個整形陣列裡有正數也有負數陣列中連續的一個或多個整陣列成一個子陣列每個子陣列都有一個和)

題目: 輸入一個整形陣列,數組裡有正數也有負數,陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。 求所有子陣列的和的最大值。要求時間複雜度為O(n)。 例如輸入的陣列為1, -2, 3, 10, -4, 7, 2, -5,和最大的子陣列為3, 10, -4,

【代碼學習】PYHTON

ext test .py logs 最大 最大值 不同 trace pytho Python的元組與列表類似,不同之處在於元組的元素不能修改。也可進行分片 和 連接操作. 元組使用小括號,列表使用方括號。 一、訪問元組 #coding=utf-8 Tuple = (‘na

python 列表字符串 切片 超出索引值不報錯

如果 -1 使用 png image pytho log 邊界 技術 通常情況下,當我們以索引值對一個字符串,或者元組,列表取值時,如果索引超出邊界,就會報錯,但是如果我們使用切片呢? 字符串: 列表: 元組: 可以看到,這三種情況都沒有報錯,而是返回對應

python入門學習-列表和(1)

索引 個人 .so .cn pytho 入門 main 範圍 mage 數據結構是通過某種方式(例如對元素進行編號)組織在一起的數據元素的集合。這些數據元素可以是數字或者字符,甚至可以是其他數據結構。 在python中,最基本的數據結構是序列(seque

python---基礎之模塊列表字典

python3 ack div 第一個 ice lis value bsp 索引 1、 模塊 寫模塊的時候盡量不要和系統自帶的模塊的名字相同 調用模塊的時候,會先在當前目錄下查找是否有這個模塊,然後再會如python的環境變量中查找 a.模塊1:sys 代碼如下: 1

【python】-- 列表

浮點數 dig else -i and 聯系 整形 __date__ -- 本節內容   字符串格式化輸出   數據運算   for循環   while循環   列表   元組 【字符串格式化輸出】   占位符  %s—string,%d—digital,%f —float

列表字典集合 練習題

大寫 strip() 練習題 lex dex art per star 空格 練習題:(字符串name = ‘ aleX‘# 1) 移除 name 變量對應的值兩邊的空格,並輸出處理結果print(name.strip())# 2) 判斷 name 變量對應的值

遍歷列表字典集合

src alt 分享 集合 -1 logs .com 列表 ima 遍歷列表,元組,字典,集合