복붙노트

[SCALA] 어떻게 튜플의 목록에서 최대 찾는 방법은?

SCALA

어떻게 튜플의 목록에서 최대 찾는 방법은?

나는 튜플의 다음과 같은 목록을 가지고 :

val arr = List(('a',10),('b',2),('c',3))

어떻게 최대 키 또는 최대 값을 갖는 튜플을 찾는 방법은?

적절한 응답은 최대 값 또는 최대 전적으로 키 ( 'A', 10)에 대한 (c, 3)이어야한다.

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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)
    
  4. from https://stackoverflow.com/questions/15769366/how-to-find-max-in-a-list-of-tuples by cc-by-sa and MIT license