반응형
Scala에서 어떻게 배열을 패턴 화합니까?
내 메서드 정의는 다음과 같습니다.
def processLine(tokens: Array[String]) = tokens match { // ...
두 번째 문자열이 비어 있는지 알고 싶다고 가정 해 보겠습니다.
case "" == tokens(1) => println("empty")
컴파일하지 않습니다. 어떻게해야합니까?
두 번째 요소가 빈 문자열인지 확인하기 위해 배열에서 패턴 일치를 수행하려는 경우 다음을 수행 할 수 있습니다.
def processLine(tokens: Array[String]) = tokens match {
case Array(_, "", _*) => "second is empty"
case _ => "default"
}
_*것도 포함하지 요소의 수에 결합한다. 이것은 아마도 더 잘 알려진 목록의 다음 일치와 유사합니다.
def processLine(tokens: List[String]) = tokens match {
case _ :: "" :: _ => "second is empty"
case _ => "default"
}
패턴 일치는 귀하의 예에 적합한 선택이 아닐 수 있습니다. 간단하게 다음을 수행 할 수 있습니다.
if( tokens(1) == "" ) {
println("empty")
}
패턴 일치는 다음과 같은 경우에 더 적합합니다.
for( t <- tokens ) t match {
case "" => println( "Empty" )
case s => println( "Value: " + s )
}
각 토큰에 대해 무언가를 인쇄합니다.
편집 : 빈 문자열 인 토큰이 있는지 확인하려면 다음을 시도 할 수도 있습니다.
if( tokens.exists( _ == "" ) ) {
println("Found empty token")
}
더 멋진 점은 _*다음과 같은 항목과 일치하는 항목에 별칭을 사용할 수 있다는 것입니다.
val lines: List[String] = List("Alice Bob Carol", "Bob Carol", "Carol Diane Alice")
lines foreach { line =>
line split "\\s+" match {
case Array(userName, friends@_*) => { /* Process user and his friends */ }
}
}
case성명은 그렇게 작동하지 않습니다. 다음과 같아야합니다.
case _ if "" == tokens(1) => println("empty")
참고 URL : https://stackoverflow.com/questions/6647166/how-do-i-pattern-match-arrays-in-scala
반응형
'Program Club' 카테고리의 다른 글
| ASP.NET MVC, Url 라우팅 : 최대 경로 (URL) 길이 (0) | 2020.11.17 |
|---|---|
| 동일한 메서드 이름을 가진 여러 인터페이스에서 상속 (0) | 2020.11.17 |
| MySql은 성능을 봅니다. (0) | 2020.11.17 |
| 백 스택에서 조각을 꺼내는 방법 (0) | 2020.11.17 |
| Angular에서 이벤트를 어떻게 테스트 할 수 있습니까? (0) | 2020.11.17 |