1. 程式人生 > >Scala陣列,定長陣列和變長陣列,增強for迴圈,until用法,陣列轉換,陣列常用演算法,陣列其它操作

Scala陣列,定長陣列和變長陣列,增強for迴圈,until用法,陣列轉換,陣列常用演算法,陣列其它操作

1. 陣列

1.1. 定長陣列和變長陣列

package cn.toto.scala

//可變陣列的長度時需要引入這個包
import scala.collection.mutable.ArrayBuffer

/**
  * Created by toto on 2017/6/27.
  */
object ArrayDemo {

  def main(args: Array[String]): Unit = {
    //初始化一個長度為8的定長陣列,其所有元素均為0
    val arr1 = new Array[Int](8)
    //直接列印定長陣列,內容為陣列的的hashcode值
println(arr1) //將陣列轉換成陣列緩衝,就可以看到原陣列中的內容了。 //toBuffer會將陣列轉換成陣列緩衝 println(arr1.toBuffer) //注意:如果沒有new,相當於呼叫了陣列的apply方法,直接為陣列賦值 //賦初始一個長度為1的定長陣列 val arr2 = Array[Int](10) println(arr2.toBuffer) //定義一個長度為3的定長陣列 var arr3 = Array("hadoop","storm","spark") //使用()來訪問元素 println(arr3(2
)) //////////////////////////////////////////////////////////////// //變長陣列(陣列緩衝) //如果想使用陣列緩衝,需要匯入import scala.collection.mutable.ArrayBuffer包 val ab = ArrayBuffer[Int]() //向陣列緩衝的尾部追加一個元素 //+=尾部追加元素 ab += 1 println(ab) //追加多個元素 ab += (2,3,4,5) println(ab) //追加一個數組++= ab ++= Array(6,7) println(ab) //追加一個數組緩衝 ab ++= ArrayBuffer(8
,9) //列印陣列緩衝ab println(ab) //在陣列某個位置插入元素用inseret,其中第一個引數是其實位置,後面兩個引數是要新增進入的值 ab.insert(0,-1,0) println(ab) //刪除陣列某個位置的元素用remove,下面的含義是從0這個位置開始,刪除2個元素 ab.remove(0,2) println(ab) } }

執行後的結果如下:

[[email protected]4563e9ab
ArrayBuffer(0, 0, 0, 0, 0, 0, 0, 0)
ArrayBuffer(10)
spark
ArrayBuffer(1)
ArrayBuffer(1, 2, 3, 4, 5)
ArrayBuffer(1, 2, 3, 4, 5, 6, 7)
ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)
ArrayBuffer(-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)

1.2. 遍歷陣列

1.增強for迴圈
2.好用的until會生成腳標,0 until 10 包含0不包含10
這裡寫圖片描述

package cn.toto.scala

/**
  * Created by toto on 2017/6/28.
  */
object ForArrayDemo {

  def main(args: Array[String]): Unit = {
    //初始化一個數組
    val arr = Array(1,2,3,4,4,5,6,7,8)
    //增強for迴圈
    for(i <- arr)
      print(i + " ")

    println("")

    //好用的until會生成一個Range
    //reverse是將前面生成的Range反轉
    for(i <- (0 until arr.length).reverse)
      print(arr(i) + " ")
  }
}

執行後的結果如下:

1 2 3 4 4 5 6 7 8 
8 7 6 5 4 4 3 2 1

1.3. 陣列轉換

yield關鍵字將原始的陣列進行轉換會產生一個新的陣列,原始的陣列不變
這裡寫圖片描述

package cn.toto.scala

/**
  * Created by toto on 2017/6/28.
  */
object ArrayYieldDemo {

  def main(args: Array[String]): Unit = {
    //定義一個數組
    val arr = Array(1,2,3,4,5,6,7,8,9)
    //將偶數取出乘以10後再生成一個新的陣列
    val res = for(e <- arr if e % 2 == 1) yield e * 10
    println(res.toBuffer)

    //更高階的寫法,用著更爽
    //filter是過濾,接收一個返回值為boolean的函式
    //map相當於將陣列中的每一個元素取出來,應用傳進去的函式
    val r = arr.filter(_ % 2 == 0).map(_ * 10)
    println(r.toBuffer)
  }
}

執行後的結果如下:

ArrayBuffer(10, 30, 50, 70, 90)
ArrayBuffer(20, 40, 60, 80)

1.4. 陣列常用演算法

在Scala中,陣列上的某些方法對陣列進行相應的操作非常方便!
這裡寫圖片描述
其它陣列操作:

scala> var arr = Array(1,6,5,4,7,9,2,25,22,11)
arr: Array[Int] = Array(1, 6, 5, 4, 7, 9, 2, 25, 22, 11)

升序排序
scala> arr.sorted
res13: Array[Int] = Array(1, 2, 4, 5, 6, 7, 9, 11, 22, 25)

降序
scala> arr.sorted.reverse
res14: Array[Int] = Array(25, 22, 11, 9, 7, 6, 5, 4, 2, 1)


scala> arr.sortWith(_>_)
res15: Array[Int] = Array(25, 22, 11, 9, 7, 6, 5, 4, 2, 1)

上面的等價下面的,相當於是降序:
scala> arr.sortWith((x,y) => x > y)
res16: Array[Int] = Array(25, 22, 11, 9, 7, 6, 5, 4, 2, 1)

下面是升序
scala> arr.sortWith((x,y) => x < y)
res17: Array[Int] = Array(1, 2, 4, 5, 6, 7, 9, 11, 22, 25)

scala> val a = Array("hadoop",1.0,2)
a: Array[Any] = Array(hadoop, 1.0, 2)

scala> a(1).asInstanceOf[Double]
res20: Double = 1.0

scala> val arr1 = new Array[Int](8)
arr1: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0)

scala> arr1(1) = 6

scala> arr1
res26: Array[Int] = Array(0, 6, 0, 0, 0, 0, 0, 0)

定義變長陣列,需要引入包:
scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

scala> val ab = new ArrayBuffer[Int]()
ab: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

scala> ab += 1
res27: ab.type = ArrayBuffer(1)

scala> ab
res28: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1)

scala> ab += 2
res30: ab.type = ArrayBuffer(1, 2)

scala> ab += (2,3,4,5)
res31: ab.type = ArrayBuffer(1, 2, 2, 3, 4, 5)

scala>

相關推薦

Scala陣列陣列陣列增強for迴圈until用法陣列轉換陣列常用演算法陣列其它操作

1. 陣列 1.1. 定長陣列和變長陣列 package cn.toto.scala //可變陣列的長度時需要引入這個包 import scala.collection.mutable.A

Math.round()增強for迴圈equals方法==的區別,instanceof運算子三目運算子的用法

1.Math.round() 有這樣一個問題,將數字23.4,23.6轉換成int型,得到的新數字是多少? 事實上直接轉換的話得到的數字都是23。但在我們程式設計的過程中有時候需要對數字進行四捨五入取整,那麼顯然上面的直接轉換就不能實現我們的要求。但好在java裡面給我提供了一個可以實現四捨五入

java第16天----TreeMap的注意點增強for迴圈ArraysCollecttions工具類多執行緒簡介

昨天知識總結 1.泛型 泛型的定義 泛型的基礎 泛型在類上,介面上,方法上的使用 泛型–限制上限,限制下線 2.Map Map與Collection的比較 Map介面常用方法 Map的遍歷----會—重點 HashMap的去重和TreeMap的排序 Tre

用java寫以下小程式碼1. 使用for迴圈列印乘法口訣表 2. 遞迴實現20! 3. 使用陣列靜態初始化方式初始化一個大小為10的整型陣列並輸出。

1.九九乘法表 public class Test { public static void main(String[] args)  { int i; int j; for(i=1;i<10;i++) { for(j=1;j<=i;j++)

增強for迴圈對於“二維”陣列進行迴圈的案例

對於“二維”陣列進行foreach迴圈的話可以如下: String name[][] = { { "張三", "李四", "王五" }, { "張六", "李七", "王八" }, { "張九

Java基礎-----jdk1.5新特性(靜態匯入增強for迴圈列舉)

package cn.itcast.jdk15; /*      Jdk1.5新特性之-----靜態匯入    靜態匯入的作用:簡化書寫。  靜態匯入可以作用於一個類的所有成員  靜態沒匯入的格式:

空指標異常(空物件呼叫成員屬性或者是成員方法增強for迴圈自動拆箱)

什麼時候會出現空指標異常? 呼叫一個空物件(null)的成員屬性或者是成員方法的時候回出現空指標異常 演示: package hello_java; public class Test { public static void main(String[] ar

java 增強for迴圈 可變引數

JDK5中定義了一種新的語法----增強for迴圈,以簡化遍歷操作。增強for迴圈只能用在陣列或實現Iterable介面的集合上. for(元素的資料型別 變數 : 陣列或者集合) { 對變數進行操作 //該變數就是集合或者陣列中的

Scala ---- while迴圈for迴圈增強for迴圈、巢狀for迴圈

3.5. 迴圈 A)、while (條件語句){程式碼塊} B)、do{程式碼塊}while(條件語句)   C)、for迴圈語法結構:for (i <- 表示式/陣列/集合) 1、簡單for迴圈   &n

foreach(增強for迴圈for的區別

首先說一下foreach有的也叫增強for迴圈,foreach其實是for迴圈的一個特殊簡化版。 再說一下foreach的書寫格式: for(元素型別 元素名稱 : 遍歷陣列(集合)(或者能進行迭代的)){ 語句 } foreach雖然是for迴圈的簡化版本,但是並不

for迴圈實現斐波拉切數列的前N項N由使用者輸入。

public static void main(String[] args) { System.out.println("請輸入位數:"); Scanner input = new Scanner(System.in); int N = input.nex

java基礎第十二篇之集合、增強for迴圈、迭代器泛型

Collection介面中的常用方法: * 所有的子類子介面都是具有的 * 集合的方法:增刪改查 * * public boolean add(E e);//新增元素 返回值表示是否新增成功 * public boolean remove(Object o);//刪除元素,返回值表示是否刪除成

關於動態記憶體分配陣列的選用(選malloc陣列

結論在最後,可直接看最後。 工作中遇到了一個這樣的問題。 需要在 一個結構體後面 繫結一個變數,但不能對原結構體進行修改。 比如說: Struct ss{ Int a; Char b; Float c; }; 在這個結構體內部不變的情況下,需要在其後繫結一個 double 

輸入一個整數陣列實現一個函式來調整該陣列中數字的順序使得所有的奇數位於陣列的前半部分 所有的偶數位於陣列的後半部分並保證奇數奇數偶數偶數之間的相對位置不

/** * * 輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分, * 所有的偶數位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 * * */ public class Solution { public stati

面試題:給定一個數組陣列中只包含01。請找到一個最的子序列其中01的數量是相同的

這個題目,看起來比較簡單,一些同學可能認為題目的描述符合動態規劃的特徵,然後就開始用動態規劃解,努力找狀態轉移方程。這些同學的感覺,是很正確的。但,找狀態轉移方程,我們要對原來的陣列進行變換一下。 原來是0和1的串,我們將0都換為-1。這樣題目目標就變成,找到一個最長的子串,子串數字和是0。設原陣列為A

劍指offer題目描述 輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序使得所有的奇數位於陣列的前半部分所有的偶數位於位於陣列的後半部分並保證奇數奇數偶數偶數之間的相對位置不

牛客網劍指offer線上程式設計: 方法一:利用兩個指標,實現了是陣列奇數在前偶數在後,但通過不了測試用例,因為改變了奇數和奇數,偶數和偶數之間的相對位置 class Solution { public:     void reOrderArray(vector<in

調整陣列順序使得奇數在前偶數在後分別保證奇數偶數之間的相對位置不

題目:輸入一個整形陣列,將陣列重新排序,使得所有奇數在前偶數在後,並使奇數之間和偶數之間的相對位置爆出不變。 思想:從陣列開頭開始遍歷所有陣列。當碰到偶數時,將偶數打包,即記錄到目前為止偶數的個數,把這些偶數看成一個整體;當碰到奇數時,將這個奇數與前面的偶數整體對調位置

scala(2) 引數 lazy 異常處理 陣列Array Map tuple

可變長引數 宣告引數型別後加* def union(s:Int*)={ var sum=0 for (i:Int<-s){ sum+=i } sum }

memcpy實現陣列複製

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C語言陣列data[0]總結

C語言變長陣列data[0] 1、前言   今天在看程式碼中遇到一個結構中包含char data[0],第一次見到時感覺很奇怪,陣列的長度怎麼可以為零呢?於是上網搜尋一下這樣的用法的目的,發現在linux核心中,結構體中經常用到data[0]。這樣設計的目的是讓陣列長度是可變的,根據需要進行分配。方便操作