2013-10-10 6 views
2

주어진 List, 어떤 요소를 필터링 할 싶습니다 Unit -().필터 목록 단위 목록

이 코드를 통해 필터링하는 것이 더 나은 방법이 있습니까?

scala> List(()).filter(x => x !=()) 
<console>:8: warning: comparing values of types Unit and Unit using `!=' will 
always yield false 
        List(()).filter(x => x !=()) 
              ^
    res10: List[Unit] = List() 
+0

내가 모두 답변을 좋아합니다. 어떻게 결정합니까? –

+1

항상 false를 반환한다고하는 이유는 'Unit'이 싱글 톤 유형이기 때문입니다. 목록에서 'Unit'값을 필터링해야하는 실제 사용 사례는 무엇입니까? 어떤 이유에서'List [Any]'를 사용하고 있습니까? – DaoWen

+0

@DaoWen은 for 표현식을 사용하여 List [JsObject]를 반복합니다. 각 요소에 대해 키 - 값을 나타내는 튜플 (String, String)을 만들고 싶습니다. 그러나 키가 "유효하지 않은"경우 for 표현식 중에 '없음'을 반환합니다. 그러나 문제 (질문 제외)와 관련하여, 나는 list.flatMap (x => x match {case Some (x) => List (x); case _ => None})'을 사용했다. 출력 목록에 '없음'이 무시됩니다 (잘못된 용어 일 수 있습니다). –

답변

3

나는이 함께 갈 것 :

List(1,(), 4,(), 9,(), 16) filter (_ !=()) 
res0: List[AnyVal] = List(1, 4, 9, 16) 
+0

다른 답변이 나에게 잘 어울리지 만,이 것은 * 논란의 여지가 있지만 * 가장 간결 해 보인다. –

3

당신은 패턴 매칭을 사용할 수

list.filter(_ match { 
    case x : Unit => false 
    case x => true}) 
3
scala> List(()).filterNot(_.isInstanceOf[Unit]) 
res0: List[Unit] = List() 

scala> List((),1,2).filterNot(_.isInstanceOf[Unit]) 
res1: List[AnyVal] = List(1, 2)