scala学习---2
生活随笔
收集整理的這篇文章主要介紹了
scala学习---2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.遍歷
object Scala05 {def main(args: Array[String]): Unit = {
//1.遍歷
/* var n=10
while (n>0){
println(n)
n-=1
}*/
//2.
/* var n=10
for(i<-1 to n)
println(i)*/
//3.
/* var n=10
for (i<-1 until n)
println(i)*/
//4.字符串遍歷
/*for(c<-"Hello World")
print(c)*/
//1.跳出循環
//·scala沒有提供類似于java的break語句。
//·但是可以使用boolean類型變量、return或者Breaks的break函數來替代使用。
/* import scala.util.control.Breaks._
breakable {
var n = 10
for(c <- "Hello World") {
if(n == 5) break;
print(c)
n -= 1
}
}*/
//2.多重for循環:九九乘法表
/* for(i <- 1 to 9; j <- 1 to 9) {
if(j == 9) {
println(i * j)
} else {
print(i * j + " ")
}
}*/
//3.if守衛:取偶數
// for(i <- 1 to 100 if i % 2 == 0) println(i)
//4.for推導式:構造集合
println( for(i <- 1 to 10) yield i)
//打印結果 Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
}
}
1.Any是String和Int的公共父類型?
2.在Scala中,定義函數時,如果函數體直接包裹在了花括號里面,而沒有使用=連接,則函數的返回值類型就是Unit。這樣的函數就被稱之為過程。過程通常用于不需要返回值的函數。
二.方法函數
object Scala01 {//1.函數def sayHello(name: String, age: Int) = {if (age > 18) {printf("hi %s, you are a big boy\n", name); age}else {printf("hi %s, you are a little boy\n", name);age}}def main(args: Array[String]): Unit = {//sayHello("leo", 30)//println(sum(10))//sayHello1("")// println(sum3(1,2,4))println(sum2(1,2,4))}//2.函數def sum(n: Int) = {var sum = 0;for(i <- 1 to n) sum += isum //默認是返回值 }//3.默認參數 如果給出的參數不夠,則會從作往右依次應用參數def sayHello1(name: String, age: Int = 20) {print("Hello, " + name + ", your age is " + age)}//4還可以混合使用未命名參數和帶名參數,但是未命名參數必須排在帶名參數前面//sayHello("Mick", lastName = "Nina", middleName = "Jack")//5.變長參數def sum3(nums:Int*)={var res=0for (num<-nums) res+=numres}//6.使用遞歸函數實現累加def sum2(nums:Int*):Int={if(nums.length==0)0else nums.head+sum2(nums.tail:_*)} }三.集合
?ArrayBuffer和Array
// 使用insert()函數可以在指定位置插入元素 // 但是這種操作效率很低,因為需要移動指定位置后的所有元素 b.insert(5, 6) b.insert(6, 7, 8, 9, 10) // 使用remove()函數可以移除指定位置的元素 b.remove(1) b.remove(1, 3) // Array與ArrayBuffer可以互相進行轉換 b.toArray a.toBuffer// 使用for循環和until遍歷Array / ArrayBuffer // 使until是RichInt提供的函數for (i <- 0 until b.length)println(b(i)) // 跳躍遍歷Array / ArrayBufferfor(i <- 0 until (b.length, 2))println(b(i)) // 從尾部遍歷Array / ArrayBufferfor(i <- (0 until b.length).reverse)println(b(i)) // 使用“增強for循環”遍歷Array / ArrayBufferfor (e <- b)println(e)// 數組元素求和val a = Array(1, 2, 3, 4, 5)val sum = a.sum // 獲取數組最大值val max = a.max // 對數組進行排序 scala.util.Sorting.quickSort(a) // 獲取數組中所有元素內容 a.mkStringa.mkString(", ")a.mkString("<", ",", ">") // toString函數 a.toStringb.toString?
使用yield和函數式編程轉換數組// 對Array進行轉換,獲取的還是Array val a = Array(1, 2, 3, 4, 5) val a2 = for (ele <- a) yield ele * ele // 對ArrayBuffer進行轉換,獲取的還是ArrayBuffer val b = ArrayBuffer[Int]() b += (1, 2, 3, 4, 5) val b2 = for (ele <- b) yield ele * ele // 結合if守衛,僅轉換需要的元素 val a3 = for (ele <- a if ele % 2 == 0) yield ele * ele// 使用函數式編程轉換數組(通常使用第一種方式) a.filter(_ % 2 == 0).map(2 * _) a.filter { _ % 2 == 0 } map { 2 * _ }算法案例:移除第一個負數之后的所有負數// 構建數組 val a = ArrayBuffer[Int]() a += (1, 2, 3, 4, 5, -1, -3, -5, -9)// 每發現一個第一個負數之后的負數,就進行移除,性能較差,多次移動數組 var foundFirstNegative = false var arrayLength = a.length var index = 0 while (index < arrayLength) {if (a(index) >= 0) {index += 1} else {if (!foundFirstNegative) { foundFirstNegative = true; index += 1 }else { a.remove(index); arrayLength -= 1 }} } 算法案例:移除第一個負數之后的所有負數(簡約版) // 重新構建數組 val a = ArrayBuffer[Int]() a += (1, 2, 3, 4, 5, -1, -3, -5, -9)// 每記錄所有不需要移除的元素的索引,稍后一次性移除所有需要移除的元素 // 性能較高,數組內的元素遷移只要執行一次即可 var foundFirstNegative = false val keepIndexes = for (i <- 0 until a.length if !foundFirstNegative || a(i) >= 0) yield {if (a(i) < 0) foundFirstNegative = truei } for (i <- 0 until keepIndexes.length) { a(i) = a(keepIndexes(i)) } a.trimEnd(a.length - keepIndexes.length)轉載于:https://www.cnblogs.com/kaiwen03/p/9547824.html
總結
以上是生活随笔為你收集整理的scala学习---2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Promise 的基础用法
- 下一篇: Pycharm启动后总是不停的updat