Scala 입문 List 사용 설명
Scala 는 함수 식 스타일 과 대상 을 대상 으로 공존 하 는 프로 그래 밍 언어 로 방법 에 부작용 이 있어 서 는 안 된다 는 것 은 함수 스타일 프로 그래 밍 의 중요 한 이념 이다.방법의 유일한 효 과 는 값 을 계산 하고 되 돌려 주 는 것 이다.이런 방식 으로 일 하 는 장점 은 방법 간 에 얽 히 지 않 기 때문에 더욱 믿 을 만하 고 중용 할 수 있다 는 것 이다.또 다른 장점(정적 유형 언어)은 전송 방법 에 들 어 가 는 모든 것 이 유형 검사 기 에 의 해 검사 되 기 때문에 논리 적 오 류 는 자신 을 유형 오류 로 표현 할 수 있다.이 함수 식 프로 그래 밍 의 철학 을 대상 세계 에 응용 하여 대상 을 변 하지 않 게 하 는 줄 알 고 있다.
앞에서 소개 한 Array 배열 은 모든 대상 이 같은 유형의 가 변 서열 을 공유 하 는 것 이다.예 를 들 어 Array[String]는 String 만 포함 합 니 다.실례 화 된 후에 도 Array 의 길 이 를 바 꿀 수 없습니다.그래서 어 레이 는 가 변 적 인 대상 이다.
같은 유형의 변 하지 않 는 대상 유형 을 공유 하 는 것 에 대해 서 는 스칼라 의 List 류 가 필요 하 다.배열 과 마찬가지 로 List[String]는 String 만 포함 합 니 다.Scala 의 List 는 자바 의 java.util.List 와 달리 항상 가 변 적 이지 않 습 니 다(자바 의 List 는 가 변 적 입 니 다).더 정확 한 것 은 스칼라 의 List 는 함수 식 스타일 의 프로 그래 밍 을 위해 설계 되 었 다 는 것 이다.
(1)List 유형 정의 및 List 의 특징:
// List
scala> val fruit=List("Apple","Banana","Orange")
fruit: List[String] = List(Apple, Banana, Orange)
//
scala> val fruit=List.apply("Apple","Banana","Orange")
fruit: List[String] = List(Apple, Banana, Orange)
// List
scala> val nums=List(1,2,3,4,5)
nums: List[Int] = List(1, 2, 3, 4, 5)
// List,List List
scala> val list = List(List(1, 2, 3), List("adfa", "asdfa", "asdf"))
list: List[List[Any]] = List(List(1, 2, 3), List(adfa, asdfa, asdf))
// List
scala> for(i <- list; from=i; j<-from)println(j)
1
2
3
adfa
asdfa
asdf
(2)List 와 Array 의 차이 점:1.List 가 생 성 되면 기 존 요소 의 값 이 바 뀌 지 않 고 요 소 를 추가 하거나 삭제 하여 새로운 집합 을 만 들 수 있 습 니 다.
앞의 nums 와 같이 값 을 바 꾸 면 컴 파일 러 가 잘못 보고 합 니 다.Array 는 성공 할 수 있 습 니 다.
scala>nums(3)=4
<console>:10: error: value update is not a member of List[Int]
nums(3)=4
^
2.List 는 재 귀 구조(Recursive Structure),예 를 들 어 링크 구조 등 을 가진다.List 유형 은 다른 유형의 집합 과 마찬가지 로 협 변성(Covariant)을 가진다.즉,유형 S 와 T 에 대해 S 가 T 의 하위 유형 이 라면 List[S]도 List[T]의 하위 유형 이다.
예 를 들 면:
scala>var listStr:List[Object] = List("This", "Is", "Covariant", "Example")
listStr:List[Object] = List(This, Is, Covariant, Example)
// List, Nothing,Nothing Scala
//, Nothing Scala String,Object
scala> var listStr = List()
listStr:List[Nothing] = List()
scala>var listStr:List[String] = List()
listStr:List[String] = List()
(3)List 상용 구조 방법
//1、 :: Nil
scala> val nums = 1 :: (2:: (3:: (4 :: Nil)))
nums: List[Int] = List(1, 2, 3, 4)
// :: ,
scala> val nums = 1::2::3::4::Nil
nums:List[Int] = List(1, 2, 3, 4)
::
(4)List 상용 동작
//
scala> nums.isEmpty
res5: Boolean = false
//
scala> nums.head
res6: Int = 1
//
scala>nums.tail.head
res7: Int = 2
//
scala>nums.tail.tail.head
res8: Int = 3
//
//
scala>nums.head::(3::nums.tail)
res11: List[Int] = List(1, 3, 2, 3, 4)
scala> nums.head::(nums.tail.head::(4::nums.tail.tail))
res12: List[Int] = List(1, 2, 4, 3, 4)
//
def isort(xs: List[Int]):List[Int] = {
if(xs.isEmpty) Nil
else insert(xs.head, issort(xs.tail))
}
def insert(x:Int, xs:List[Int]):List[Int] = {
if(xs.isEmpty || x <= xs.head) x::xs
else xs.head :: insert(x, xs.tail)
}
//
scala>List(1, 2, 3):::List(4, 5, 6)
res13: List[Int] = List(1, 2, 3, 4, 5, 6)
// ,
scala> nums.init
res13: List[Int] = List(1, 2, 3)
//
scala>nums.last
res14: Int = 4
//
scala> nums.reverse
res15: List[Int] = List(4, 3, 2, 1)
//
scala> nums.reverse.reverse == nums
// n
scala>nums drop 3
res16: List[Int] = List(4)
// n
scala>nums take 1
res17: List[Int] = List[1]
//
scala> nums.splitAt(2)
res18: (List[Int], List[Int]) = (List(1, 2),List(3, 4))
//
scala> (nums.take(2),nums.drop(2))
res19: (List[Int], List[Int]) = (List(1, 2),List(3, 4))
//Zip
scala> val nums=List(1,2,3,4)
nums: List[Int] = List(1, 2, 3, 4)
scala> val chars=List('1','2','3','4')
chars: List[Char] = List(1, 2, 3, 4)
// List (Tuple), List
scala> nums zip chars
res20: List[(Int, Char)] = List((1,1), (2,2), (3,3), (4,4))
//List toString
scala> nums.toString
res21: String = List(1, 2, 3, 4)
//List mkString
scala> nums.mkString
res22: String = 1234
//
scala> nums.toArray
res23: Array[Int] = Array(1, 2, 3, 4)
(5)동반 자 를 나열 하 는 방법
//apply
scala> List.apply(1, 2, 3)
res24: List[Int] = List(1, 2, 3)
//range , List
scala> List.range(2, 6)
res25: List[Int] = List(2, 3, 4, 5)
// 2
scala> List.range(2, 6,2)
res26: List[Int] = List(2, 4)
// -1
scala> List.range(2, 6,-1)
res27: List[Int] = List()
scala> List.range(6,2 ,-1)
res28: List[Int] = List(6, 5, 4, 3)
// List
scala> List.make(5, "hey")
res29: List[String] = List(hey, hey, hey, hey, hey)
//unzip
scala> List.unzip(res20)
res30: (List[Int], List[Char]) = (List(1, 2, 3, 4),List(1, 2, 3, 4))
//list.flatten,
scala> val xss =
| List(List('a', 'b'), List('c'), List('d', 'e'))
xss: List[List[Char]] = List(List(a, b), List(c), List(d, e))
scala> xss.flatten
res31: List[Char] = List(a, b, c, d, e)
//
scala> List.concat(List('a', 'b'), List('c'))
res32: List[Char] = List(a
, b, c)
(6)::와::연산 자 소개List 에서 자주 사용 하 는':',발음 은'cons'입 니 다.Cons 는 새로운 요 소 를 기 존 요소 의 맨 앞 에 조합 한 다음 결과 List 로 되 돌려 줍 니 다.
scala> val twoThree = List(2, 3)
scala> val oneTwoThree = 1 :: twoThree
scala> oneTwoThree
oneTwoThree: List[Int] = List(1, 2, 3)
위의 표현 식"1:to Three"에서::오른쪽 동작 으로 숫자 를 만 들 고 목록 to Three 의 방법 입 니 다.의 심 스 러 울 수도 있 습 니 다.표현 식 이 어떻게 오른쪽 매개 변수 방법 입 니까?이것 은 Scala 언어의 예외 적 인 상황 입 니 다.만약 에 하나의 방법 조작 부호 가 a*b 와 같이 표시 된다 면 방법 은 왼쪽 조작 수 에 의 해 호출 됩 니 다.예 를 들 어 a.*(b)-방법 명 이 콜론 으로 끝나 지 않 는 한.이런 상황 에서 방법 은 오른쪽 조작 수 에 의 해 호출 된다.List 는"::"라 는 방법 이 있 습 니 다.두 개의 목록 을 중첩 하 는 데 사 용 됩 니 다.
scala> val one = List('A', 'B')
val one = List('A', 'B')
scala> val two = List('C', 'D')
scala> one:::two
res1: List[Char] = List(A, B, C, D)
다음은 List 방법 목록 입 니 다.주의:
클래스 List 는 append 작업 을 제공 하지 않 았 습 니 다.목록 이 길 어 지면 append 의 시간 이 선형 으로 증가 하기 때문에 사용:접 두 사 를 만 드 는 데 는 상수 시간 만 걸 립 니 다.요 소 를 추가 하여 목록 을 만 들 려 면 접 두 사 를 넣 고 완성 한 후에 reverse 를 호출 하 는 것 이 선택 입 니 다.또는 ListBuffer 를 사용 하여 append 작업 을 제공 하 는 가 변 목록 입 니 다.완 료 된 후에 toList 를 호출 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
sbt-native-packager로 docker 이미지의 기반을 amazoncorretto로 만들고 싶습니다.build.sbt에 다음을 추가합니다. 그런데 에서 빌드하려고하면 같은 오류가 발생하여 실패합니다 생성 된 Dockerfile을 들여다 보면 같은 행이 있습니다. 이지만 amazonlinux에서는 addgroup 또...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.