[SCALA] 어떻게 튜플의 목록에서 최대 찾는 방법은?
SCALA어떻게 튜플의 목록에서 최대 찾는 방법은?
나는 튜플의 다음과 같은 목록을 가지고 :
val arr = List(('a',10),('b',2),('c',3))
어떻게 최대 키 또는 최대 값을 갖는 튜플을 찾는 방법은?
적절한 응답은 최대 값 또는 최대 전적으로 키 ( 'A', 10)에 대한 (c, 3)이어야한다.
해결법
-
==============================
1.쉬워요:
쉬워요:
scala> val list = List(('a',10),('b',2),('c',3)) list: List[(Char, Int)] = List((a,10), (b,2), (c,3)) scala> val maxByKey = list.maxBy(_._1) maxByKey: (Char, Int) = (c,3) scala> val maxByVal = list.maxBy(_._2) maxByVal: (Char, Int) = (a,10)
그래서 기본적으로 당신이 목록에 제공 할 수있는 [T] 최대 값을 찾는 데 사용됩니다 (B는 예에 의한 지능이나 문자열 같은 주문 유형이 될 수 있습니다) 어떤 기능 T => B.
-
==============================
2.아니오 @ OM-NOM-NOM은 간결하고 정확한 답을 제공하는 의심하지 않습니다. 그러나 빈 목록은 예외가 발생합니다.
아니오 @ OM-NOM-NOM은 간결하고 정확한 답을 제공하는 의심하지 않습니다. 그러나 빈 목록은 예외가 발생합니다.
내 원래, 결함이 답을 다시 쓰기에 수정 # 2 내 첫 편집 감안할 때, 그것은 가치입니다 :
def max[A](list: List[(A, Int)]): Option[Int] = list match { case Nil => None case x :: xs => { val result = xs.foldLeft(x._2) { // acc = first item in list (acc, elem) => if(elem._2 > acc) elem._2 else acc } Some(result) } }
참고 : 당신이 대신 지능의 더 일반적인 민 같은 유형을 사용할 수 있도록 것이라고 scalaz 같은데요,하지만 난 전혀 그것으로 일을하지 않았습니다.
테스트
scala> val list = List(('a',10),('b',2),('c',3)) list: List[(Char, Int)] = List((a,10), (b,2), (c,3)) scala> max(list) res5: Option[Int] = Some(10) scala> val list: List[(String, Int)] = Nil list: List[(String, Int)] = List() scala> max(list) res6: Option[Int] = None
시작 값을 따기 위해 편집, 내가 @DustinGetz과 이야기 후 내 대답을 편집하기로 결정했다.
이 응용 프로그램이 실행되고있는 특정 OS / 시스템에 의존하는 것에 따라 따기 Int.MinValue은 좋은 선택하지 않을 수 있습니다.
나는 목록의 첫 번째 요소는 시작 값되어야한다고 주장한다. 목록이 비어있는 경우, 잠재적 인 런타임 예외가있다.
https://stackoverflow.com/a/23184020/409976 - 더 토론이 게시물에서 봐 주시기 바랍니다.
-
==============================
3.시퀀스가 비어 있으면 None을 돌려 maxByOption / minByOption을 사용하여 구성 될 것이다 (빈 목록을 처리하는) 스칼라 2.13, 약간 안전한 솔루션을 시작 :
시퀀스가 비어 있으면 None을 돌려 maxByOption / minByOption을 사용하여 구성 될 것이다 (빈 목록을 처리하는) 스칼라 2.13, 약간 안전한 솔루션을 시작 :
List(('a', 10),('b', 2),('c', 3)).maxByOption(_._1) // Option[(Char, Int)] = Some((c,3)) List[(Char, Int)]().maxByOption(_._1) // Option[(Char, Int)] = None
목록이 비어있을 때이 방법은 또한 기본 값에 폴백 (fallback)을 결정할 수 :
List[(Char, Int)]().maxByOption(_._1).getOrElse(('a', 1)) // (Char, Int) = (a,1)
from https://stackoverflow.com/questions/15769366/how-to-find-max-in-a-list-of-tuples by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 스칼라의 연속성을 사용할 수 있습니까? (0) | 2019.11.28 |
---|---|
[SCALA] 스칼라 사항 String.split는 일을하지 않습니다 (0) | 2019.11.28 |
[SCALA] 스칼라에서 어떻게 목록을 접어 중간 결과를 반환합니까? (0) | 2019.11.28 |
[SCALA] 파일 이름이 너무 오래 SBT (0) | 2019.11.28 |
[SCALA] SBT를 사용 종속성의 스냅 샷 버전을 다시 다운로드 (0) | 2019.11.28 |