Scala 진급 의 길 - 고급 데이터 형식의 배열 사용

31995 단어
Scala 진급 의 길 - 고급 데이터 형식의 배열 사용
저자: 윤 정 걸
판권 성명: 오리지널 작품, 전재 사절!그렇지 않 으 면 법 적 책임 을 추궁 할 것 이다.
 
 
 
1. 배열 의 초기 화 방식
1 >. 길이 가 변 하지 않 는 배열 배열
주의: 말 그대로 길이 가 변 하지 않 는 배열 은 배열 의 길이 가 변 하지 않 지만 배열 의 내용 은 바 꿀 수 있 습 니 다!
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:[email protected]
 5 */
 6 package cn.org.yinzhengjie.function
 7 
 8 object MyArray {
 9 
10     def main(args: Array[String]): Unit = {
11         /**
12           *            ,    ,    (        var     )。
13           * [String] :         ,        String      
14           * (3) :     3    arr     
15           */
16         var arr :Array[String] = new Array[String](3)
17         /**
18           *   ,          arr            ,         ,  Scala               
19           */
20         var arr2 = new Array[String](3)
21 
22         /**
23           *       ,      ,     (      val     )
24           */
25         val arr3 = Array (1,2,3)    //              ,        new    !
26 
27         /**
28           *               3       ,      
29           */
30         arr(0) = "yinzhengjie"
31         arr2(1) = "   "
32         arr3(2) = 100
33 
34         //         toBuffer  ,        toString  。
35         println(arr.toBuffer.toString())
36         println(arr2.toBuffer.toString())
37         println(arr3.toBuffer.toString())
38     }
39 }
40 
41 
42 
43 /*
44            :
45 ArrayBuffer(yinzhengjie, null, null)
46 ArrayBuffer(null,    , null)
47 ArrayBuffer(1, 2, 100)
48  */

 2 >. 길이 가 변 배열 (Array Buffer)
말 그대로 길이 가 변 배열 은 배열 의 길 이 를 변화 시 킬 수 있 고 그 내용 도 변화 시 킬 수 있 습 니 다!
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:[email protected]
 5 */
 6 package cn.org.yinzhengjie.function
 7 
 8 /**
 9   *            (mutable    )    (immutable    )    ,immutable                ,         
10   *      ,                 ArrayBuffer,           !
11   */
12 import scala.collection.mutable.ArrayBuffer
13 
14 
15 object ArrayBuffDemo {
16 
17     def main(args: Array[String]): Unit = {
18         //         
19         val arr = ArrayBuffer[String]("yinzhengjie","   ","Scala")
20         //         
21         arr.foreach(i => print(i + "\t"))
22         println("
========== ===========") 23 // 24 arr+=("Shell","Python","Java","Golang") 25 // 26 arr.foreach(i => print(i + "\t")) 27 } 28 } 29 30 /* 31 : 32 yinzhengjie Scala 33 ========== =========== 34 yinzhengjie Scala Shell Python Java Golang 35 */

 
2. 배열 의 상용 방법
1 >. 맵 방법 (map)
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:[email protected]
 5 */
 6 package cn.org.yinzhengjie.function
 7 
 8 object MyArray {
 9 
10     def main(args: Array[String]): Unit = {
11         /**
12           *   ,            ,     new,       apply        ,       ".apply"    。
13           */
14         val arr = Array.apply[String]("yinzhengjie","   ","Scala","Python","Golang")
15 
16         /**
17           *       f1,       String         ; arr    map               。
18           */
19         var f1 = (x:String) => x + "_2018"
20         val arr2 = arr.map(f1)
21 
22         /**
23           *   ,            ,  :
24           */
25         val arr3 = arr.map((x:String) => x + "_2018")   //        f1      ,          
26         val arr4 = arr.map(x => x + "_2018")            //   x   Scala          
27         var arr5 = arr.map(_ + "_2018")                 //       ("_")       arr          
28 
29         println(arr.toBuffer.toString())
30         println(arr2.toBuffer.toString())
31         println(arr3.toBuffer.toString())
32         println(arr4.toBuffer.toString())
33         println(arr5.toBuffer.toString())
34     }
35 }
36 
37 
38 
39 /*
40            :
41 ArrayBuffer(yinzhengjie,    , Scala, Python, Golang)
42 ArrayBuffer(yinzhengjie_2018,    _2018, Scala_2018, Python_2018, Golang_2018)
43 ArrayBuffer(yinzhengjie_2018,    _2018, Scala_2018, Python_2018, Golang_2018)
44 ArrayBuffer(yinzhengjie_2018,    _2018, Scala_2018, Python_2018, Golang_2018)
45 ArrayBuffer(yinzhengjie_2018,    _2018, Scala_2018, Python_2018, Golang_2018)
46  */

2 >. 평면 화 작업 (flatten 과 flatMap)
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:[email protected]
 5 */
 6 package cn.org.yinzhengjie.function
 7 
 8 object MyArray {
 9 
10     def main(args: Array[String]): Unit = {
11         /**
12           *       ,         
13           */
14         val arr = Array.apply[String]("yinzhengjie,   ","Python,Shell,Golang,Java,Scala")
15         /**
16           *             map           (",")    ,    arr           2   ,
17           *                   “,”      。
18           */
19         val arr2 = arr.map(_.split(","))
20 
21         /**
22           *             ,  flatten     arr2         ,   arr2                。
23           */
24         val arr3 = arr2.flatten
25 
26 
27         /**
28           *       arr   arr3      ,      ,“arr3 = arr.map(_.split(",")).flatten”,        flatMap   !
29           */
30         val arr4 = arr.flatMap(_.split(","))
31 
32         /**
33           *       arr,arr2  arr3          。
34           */
35         println(arr.toBuffer.toString(),arr.length)
36         println(arr2(0).toBuffer.toString(),arr2(1).toBuffer.toString(),arr2.length)
37         println(arr3.toBuffer.toString(),arr3.length)
38         println(arr4.toBuffer.toString(),arr4.length)
39     }
40 }
41 
42 
43 /*
44            :
45 (ArrayBuffer(yinzhengjie,   , Python,Shell,Golang,Java,Scala),2)
46 (ArrayBuffer(yinzhengjie,    ),ArrayBuffer(Python, Shell, Golang, Java, Scala),2)
47 (ArrayBuffer(yinzhengjie,    , Python, Shell, Golang, Java, Scala),7)
48 (ArrayBuffer(yinzhengjie,    , Python, Shell, Golang, Java, Scala),7)
49  */

3 >. 옮 겨 다 니 는 방법 (foreach)
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:[email protected]
 5 */
 6 package cn.org.yinzhengjie.function
 7 
 8 object MyArray {
 9 
10     def main(args: Array[String]): Unit = {
11         /**
12           *       ,         
13           */
14         val arr = Array.apply[String]("yinzhengjie,   ","Python,Shell,Golang,Java,Scala")
15 
16         /**
17           *   flatMap arr         
18           */
19         val arr2 = arr.flatMap(_.split(","))
20 
21         /**
22           *           foreach    arr2           ,foreach               。            
23           */
24         arr2.foreach(x => print(x + "\t"))
25         arr2.foreach(println)
26 
27 
28     }
29 }
30 
31 
32 
33 
34 /*
35            :
36 yinzhengjie           Python    Shell    Golang    Java    Scala    yinzhengjie
37    
38 Python
39 Shell
40 Golang
41 Java
42 Scala
43  */

4 >. 단어 통계 사례 (wold count)
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:[email protected]
 5 */
 6 package cn.org.yinzhengjie.function
 7 
 8 object MyArray {
 9 
10     def main(args: Array[String]): Unit = {
11         /**
12           *       ,         
13           */
14         val arr = Array.apply[String]("yinzhengjie,   ,yinzhengjie","Python,Shell,Golang,Java,Scala,yinzhengjie")
15 
16 
17         /**
18           * flatMap:
19           *            ,  flatMap(_.split(","))   2             
20           * groupBy:
21           *             ,               ,              
22           * mapValues:
23           *               ,             
24           */
25         val arr2 = arr.flatMap(_.split(",")).groupBy(x => x).mapValues(x => x.length)
26         arr2.foreach(x => print(x + "\t"))
27         println("
======= =======") 28 /** 29 * : 30 * map , , 31 * toList: 32 * arr3 map list 33 * sortBy: 34 * , ,x._1, x arr3 list , “_1” , , 1 2 35 */ 36 val arr3 = arr2.toList.sortBy(x=>x._1) 37 arr3.foreach(x => print(x + "\t")) 38 } 39 } 40 41 42 43 44 /* 45 : 46 (Shell,1) (Scala,1) (yinzhengjie,3) (Python,1) ( ,1) (Golang,1) (Java,1) 47 ======= ======= 48 (Golang,1) (Java,1) (Python,1) (Scala,1) (Shell,1) (yinzhengjie,3) ( ,1) 49 */

 숫자 에 따라 거꾸로 배열 하려 면 다음 코드 도 World count 단어 통 계 를 볼 수 있 습 니 다.
 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Scala%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 4 EMAIL:[email protected]
 5 */
 6 package cn.org.yinzhengjie.function
 7 
 8 object WordCount {
 9     def main(args: Array[String]): Unit = {
10         val words: Array[String] = Array("hello yinzhengjie hello yinzhengjie Python", "hello Python hello yinzhengjie Scala Golang")
11         // words             (" ")    。
12         val wordSplit: Array[Array[String]] = words.map((x: String) => x.split(" "))
13         //      Array   
14         val fltWords: Array[String] = wordSplit.flatten
15         //      : hello -> Array(hello, hello, hello, hello)
16         val mapWords: Map[String, Array[String]] = fltWords.groupBy((wd: String) => wd)
17         //  map  ,          : (hello, 4), (yinzhengjie,1).....
18         val wrdResult: Map[String, Int] = mapWords.map(wdKV => (wdKV._1, wdKV._2.length))
19         // Map     ,   map   List,   sortBy            (     ,                   )
20         val sortResult: List[(String, Int)] = wrdResult.toList.sortBy(t => - t._2)
21         //       
22         sortResult.foreach(i => println(i))
23     }
24 }
25 
26 
27 
28 /*
29            :
30 (hello,4)
31 (yinzhengjie,3)
32 (Python,2)
33 (Scala,1)
34 (Golang,1)
35  */

좋은 웹페이지 즐겨찾기