Scala集合(List,Map,Array)

List集合

 val list=List(1,2,3,4,4)
  //獲取下標是1的
   val res=list(1)
  println(res)
  //往list集合中填充数据       List(1,2)
  val lis = List.range(1,3)   //不包括3
  for(o <- lis){
    print(" "+o)
  }
  //ListBuffer是可變list,只有可變的list才能添加修改list中的元素
  val listb=ListBuffer(1,2,9,4)
  //添加数据
  listb.+=(5)
  listb+=(6)
  listb.append(7)
  listb.insert(0,0)
  println(listb)
  //删除数据    删除下标是0的
  listb.remove(0)
  println(listb)
  //删除指定下标的数据,然后从这个下标开始往后删除2个数据
  //ll.remove(1,2)
  //取出3,4      slice(滑动切割)是前开后闭
  val res2 = listb.slice(2,4)
  println(res2)
  //取出3,4然后再放到ListBuffer中   ??
  //让listb中的元素跟下标有关联
  val res3 = listb.zipWithIndex
  println(res3)
  //让两个list进行关联       展示的数据量的多少跟要被关联的那个list集合长度有关
  val lista=ListBuffer(1,2,3)
  val res4 = listb.zip(lista)
  println("************"+res4)
  println("--------第一个max之前的数求和----------")
  val list10=List(1,2,3,4,5,6,7,"max",8,9,0,"max",1,2,3)
  val indexl = list10.indexOf("max")
  val inde = list10.slice(0,indexl)
  val indesum = inde.map(x=>x.toString.toInt).reduce(_+_)
  println(indesum)
  println("--------最后一个max之后的数求和----------")
  val last = list10.lastIndexOf("max")
  val s = list10.slice(last+1,list10.length)
  val lastsum=s.map(x=>x.toString.toInt).reduce(_+_)
  println(lastsum)

Map 集合

val map1=Map("xss"->24,("gj",20))
  //仅獲取map中的所有鍵
  val key = map1.keys
  //仅獲取map中的所有值
  val valu = map1.values
  println(valu)
  //把徐磊的年齡取出來     some()表示當前鍵有值   None  表示沒值
  val xage=map1.get("xs")    //获取map中指定键的值  有som() 和None
  val sage=map1("xss")    //获取map中指定键的值
  println("获取map中的值"+sage)
  //*******  普通map不能添加數據,只有hashmap才能添加數據
  val map2=mutable.HashMap("xss"->30,"gj"->20)
  //1、添加數據    .+=  +=  都能添加數據和更新數據
   map2.+=("hx"->18)
  map2+=("vvvv"->88)
  //2、添加數據    put的时候只能逗号隔开 必能用箭头  ->
  map2.put("wlg",18)
println(map2)
  //1、删除数据
  map2.remove("wlg")
  //2、删除数据
  map2.-=("hx")
   println("没有or之前的"+map2)
  //查看是否有hx这个键,有的话获取他的值,没有的话就把18赋值给当前键
  val res  = map2.getOrElse("hx",18)
  val res2 = map2.getOrElse("xss",0)
  println("or之后的"+map2)
  //更新map中的数据
  map2("xss")=99
  //更新多个key
  map2.+=(("xss",20),("gj",28))
  map2+=("xss"->10,"gj"->0)
  println(map2)
//遍历map集合的三种方法
  //一、先获取所有的key然后再从map2中取出key对应的值
  for(key<-map2.keys){
    println(key+"->"+map2(key))
  }
  //二、模式匹配  直接用k 和 v 代替map2中的key和value
  for((k,v)<-map2){
    println(k+"-->"+v)
  }
  //三、foreach 和 case     foreach外面必须是大括号
  map2.foreach{case (k,v)=>println(k+"--->"+v)}

  //---------------------匹配關係
  //字符串匹配
  val arr=Array("chang","shi","max","cao","cheng","jack")
  //在arr中隨機取出一個數
  val name=arr(Random.nextInt(arr.length))
  name match {
    case "change"=>println("change")
    case "shi"=>println("shi")
    case _=>println("其他")
  }
  //類型匹配
  val arr2=Array("jack",3.14,5.666666f,10,true)
  val name2=arr2(Random.nextInt(arr2.length))   //nextInt 前开后闭
  name2 match {
    case a:String=>println(a+"是string類型")
    case a:Int=>println(a+"是int類型")
    case a:Double=>println(a+"是double類型")
    case _=>println("其他")
  }
  //list匹配     每個元素之間是以 :: 隔開的   s"$a,$b" 後面是引號
 // val list=0::2::Nil   //將0和2裝進空的list集合中
 // println(list)

  val list=List(1,2,8)
  list match {
    case 0::Nil=>println("集合中只有一個0")
    case 1::tail=>println("以1開頭的")
    case a::b::8::Nil=>println(s"$a,$b",8)//集合中有三個元素并且最後一個元素是8
  }
  //數組的匹配    其他是用 _* 不是直接用 * 表示
  val arr3=Array(8,0)
  arr3 match {
    case Array(0)=>println("數組中只有一個0")
    case Array(a,0)=>println(s"$a",0)
    case Array(0,_*)=>println("0還有其他")
  }
  //元組的匹配
  val tup=(5,8,0)
  tup match {
    case (5,a,b)=>println(5,s"$a,$b")
    case (5,5,5)=>println("全部是5")
    case _=>println("其他")
  }

其他知识点

val bb = ArrayBuffer[Int]()
  bb += (1,2,3,4,5);
  bb.trimEnd(4) // b 等于 ArrayBuffer(1,2)
  println(bb.toBuffer)
//***isUpper提取除大写字母,最后将大写字母和小写字母用逗号隔开分别显示
  val l = "New York".partition(_.isUpper)
  println(l)   //(NY,ew ork)


  val a = Array[Int](0, 0)
  val b = Array[Int](1, 1)
  println(a.toBuffer)
  println(b.toBuffer)
//**crazy"*3   就会出现三次拼接在一块
  val x = "crazy"*3
    println(x)
//**获取首字母和尾字母
  val t="Hello word".take(1)  //从头开始获取几个单词  1就是1个单词,2就是从头获取两个单词
  val w="Hello word".reverse(0)
  println(t)
  println(w)
//-----------------------------------数组
//创建数组的不同方式
//new Array[Int](3)        小括号里面放的是长度
//ArrayBuffer[String]("3") 小括号里面放的是对应类型的数
//Array(4,9,"ss")          直接放数组中
//**定义数组 [类型]  和  (长度)
  //第一种方式  new 数组并指定长度
  val arra=new Array[Int](3)  //怎么往数组中添加数据  ??

  // 第二种方式   可以在定义的时候放入数据/后期通过+=的方式进行存入数据
  //直接定义ArrayBuffer数组的[类型]  小括号后面放数据   **创建的时候必须放数据,不然运行报错
  // 或者先定义,然后通过+=的方式将数据加进数组 val bb = ArrayBuffer[Int]()
  //                                        bb += (1,2,3,4,5);
  val arrb=ArrayBuffer[String]()
  arrb+=("33")
  println(arra.toBuffer)
  println("通过后期+=的方式进行数组的添加"+arrb.toBuffer)
  //第三种方式   不同数组在定义时就放到数组中
  val arr=Array(4,9)
  //求出数组中的最大值
  println(arr.max)
  //对数组中的数进行排序    倒序
 val arrsort1 = arr.sorted.reverse
  println(arrsort1.toBuffer)
  //x相当于arr中的每一个数字
  val arrsort2 = arr.sortBy(x=>x).reverse
  println(arrsort2.toBuffer)
//**3表示有三个array     4表示每个array中有四个元素
  //(ArrayBuffer(0, 0, 0, 0),ArrayBuffer(0, 0, 0, 0),ArrayBuffer(0, 0, 0, 0))
  val s=Array.ofDim[Int](3,4)
  println(s(0).toBuffer,s(1).toBuffer,s(2).toBuffer)
//**通过+=的方式往数组中添加进数据
  val bbb = ArrayBuffer[Int]()
  bbb += (1,2,3,4,5);
  println("bbb"+bbb.toBuffer)
//**数组乘以Int
  val af = Array(1,2,3)
  val bf = af.map(_*2)
  println(bf.toBuffer)
//**输出n到0的数字(倒序输出)
  def countdown(n:Int){(0 to n).reverse foreach print}
  countdown(3)
  //输出n到0的数字(正序输出)
  def vv(n:Int)={(0 to n) foreach print}
  vv(3)
  //在每个单词之间加上符号ArrayBuffer(o, n, e, -, t, w, o, -, t, h, r, e, e)
  val pp = Array("one","two","three").mkString("-")
  println(pp.toBuffer)
 //ArrayBuffer(t, w, o)
  val ooo = Array("one","two","three").max
  println(ooo.toBuffer)
发布了50 篇原创文章 · 获赞 30 · 访问量 7034

猜你喜欢

转载自blog.csdn.net/qq_44472134/article/details/104213453