본문 바로가기

프로그래밍/Scala

Scala Array 문법

https://school.programmers.co.kr/learn/courses/1/lessons/82

--> 유니티 강의 C# 관련

 

 

https://school.programmers.co.kr/learn/courses/12

--> 30분 scala

 

 

object LearnScala {
    // 배열의 내용을 출력하는 메소드
    def printArray[K](array:Array[K]) = println(array.mkString("Array(" , ", " , ")")) 
    def main(args: Array[String]): Unit = {
        
        // ① Array[Int]  
        val array1 = Array(1, 2, 3)
        print("① ")
        printArray(array1)
        
        // ② Array[Any]
        val array2 = Array("a", 2, true)
        print("② ")
        printArray(array2)
        
        // ③ 배열의 값을 읽고 쓰기
        val itemAtIndex0 = array1(0)        
        array1(0) = 4
        print("③ ")
        printArray(array1)
        
        // ④ 배열을 붙일때는 ++연산자를 이용
        // 앞에 붙일때는 +:, 뒤에 붙일때는 :+ 연산자
        val concatenated = "앞에 붙이기" +: (array1 ++ array2) :+ "뒤에 붙이기"
        print("④ array1과 array2를 더하면: ")
        printArray(concatenated)
        
        // 값으로 index찾기
        array2.indexOf("a")
        
        // ⑤ 다른 값만 가져오기
        val diffArray = Array(1,2,3,4).diff(Array(2,3))
        print("⑤ Array(1,2,3,4).diff(Array(2,3))의 결과: ")
        printArray(diffArray)
        
        
        val personArray = Array(("솔라",1), ("문별",2), ("휘인",3))        
        // ⑥ Find 메소드를 이용해서 findByName이라는 메소드 생성
        // Find는 조건에 맞는 값을 찾으면 검색을 중단
        // getOrElse는 일치하는 값이 없을 경우 넘겨줄 기본 값
        // getOrElse가 없을때 일치하는 값이 없으면 None
        def findByName(name:String) = personArray.find(_._1 == name).getOrElse(("화사",4))
        val findSolar = findByName("솔라")  // 값("솔라",1)을 찾아서 넘겨줌
        val findSun = findByName("태양")  // 값이 없으므로 getOrElse에 있는 값("화사",4)이 들어감
        println(findSolar)
        println(findSun)
    }
}

 

object LearnScala {
    def main(args: Array[String]): Unit = {
        // ① to를 이용하면 1부터 10을 포함하는 Range를 생성합니다.
        val range1 = 1 to 10
        println(s"① 1 to 10 →\n\t $range1")
        
        // ② until을 이용하면 마지막 숫자를 포함하지 않는 Range를 생성합니다.    
        val range2 = 1 until 10
        println(s"② 1 until 10 →\n\t $range2")
        
        // ③ by를 이용하면 숫자를 건너 띄는 Range를 생성합니다.
        val range3 = 1 until 10 by 3
        println(s"③ 1 until 10 by 3 →\n\t $range3")
        
        // ④ toList를 통해 List로 변환합니다.
        println(s"④ range1.toList →\n\t ${range1.toList}")
        
        // ⑤ filter: 조건에 맞는것만 모으기(4 이상인것만 모으기)
        val moreThan4 = range1.filter(_ > 4)  
        println(s"⑤ range1.filter(_ > 4) →\n\t $moreThan4")
        
        // ⑥ map - 각 아이템의 값을 변경하기
        val doubleIt = range1.map(_ * 2)  
        println(s"⑥ range1.map(_ * 2) →\n\t $doubleIt")
    }
}

 

 

 

val num = -5  
        val numAbs = num.abs // 절대값
        val max5or7 = numAbs.max(7) // 5(numAbs)와 7 사이의 최대값  
        val min5or7 = numAbs.min(7) // 5(numAbs)와 7 사이의 최소값
        println(numAbs) // 5  
        println(max5or7) // 7   
        println(min5or7) // 5
        val t1 = new Tuple3(1, "hello", true)
        val t2 = (1, "hello", true)
        
        println(t2)
        
        var numbers = (1,2,3,4)
        val sum = numbers._1 + numbers._2 + numbers._3 + numbers._4
        println(sum)

 

 

 



https://www.scala-lang.org/api/2.13.3/scala/Array.html

val a1 = Array(1, 2, 3)
// a1: Array[Int] = Array(1, 2, 3)

val a2 = a1 map (_ * 3)
//a2: Array[Int] = Array(3, 6, 9)

val a3 = a2 filter (_ % 2 != 0)
//a3: Array[Int] = Array(3, 9)

a3.reverse
//res0: Array[Int] = Array(9, 3)
val seq: Seq[Int] = a1
//seq: Seq[Int] = WrappedArray(1, 2, 3)

val a4: Array[Int] = seq.toArray
//a4: Array[Int] = Array(1, 2, 3)

a1 eq a4
//res1: Boolean = true

** eq 는 이번에 처음 알게된 메서드인데 유용하게 쓰일 것 같다.

val a:Array[Int] = Array(1,2,3)
val b = Array(1,2,3)

if(a eq(b)) println("same")
else println("not same")

 

 

 

 

 

 

 

 

 

 

 

'프로그래밍 > Scala' 카테고리의 다른 글

Scala - Type polymorphism  (0) 2022.11.26
백준 2738번 행렬의 덧셈  (0) 2022.11.23
Scala Array 문법  (0) 2022.11.22
Scala String 문법  (0) 2022.11.22
1103 Mixin, Stacking with Traits  (0) 2022.11.03