[SCALA] 어떻게 술어에 의해 두 부분으로 순서를 분할하려면?
SCALA어떻게 술어에 의해 두 부분으로 순서를 분할하려면?
어떻게 술어에 의해 두 개의 목록으로 순서를 분할합니까?
대안 : 나는 필터와 filterNot를 사용하거나 내 자신의 방법을 쓸 수 있지만 더 나은 더 일반적인 (내장) 방법이 없을 수 있습니까?
해결법
-
==============================
1.파티션 방법을 사용하여 :
파티션 방법을 사용하여 :
scala> List(1,2,3,4).partition(x => x % 2 == 0) res0: (List[Int], List[Int]) = (List(2, 4),List(1, 3))
-
==============================
2.범위 : - 파티션이 당신이 원하는 것은이었다 좋은 또한 두 가지의 목록을 분할하는 술어를 사용하는 다른 방법이있다.
범위 : - 파티션이 당신이 원하는 것은이었다 좋은 또한 두 가지의 목록을 분할하는 술어를 사용하는 다른 방법이있다.
첫 번째 파티션은 두 번째 목록에 한 목록에있는 모든 "true"를 요소 및 다른 사람을 넣어 것입니다.
요소가 (술어의 관점에서) "거짓"이 될 때까지 범위가 하나 개의 목록에있는 모든 요소를 넣어 것입니다. 그 시점 앞으로에서, 그것은 두 번째 목록의 요소를 넣어 것입니다.
scala> Seq(1,2,3,4).span(x => x % 2 == 0) res0: (Seq[Int], Seq[Int]) = (List(),List(1, 2, 3, 4))
-
==============================
3.당신은 scalex.org를 살펴 할 수 있습니다 - 당신이 자신의 서명으로 기능에 대한 스칼라 표준 라이브러리를 검색 할 수 있습니다. 예를 들어, 다음을 입력합니다 :
당신은 scalex.org를 살펴 할 수 있습니다 - 당신이 자신의 서명으로 기능에 대한 스칼라 표준 라이브러리를 검색 할 수 있습니다. 예를 들어, 다음을 입력합니다 :
List[A] => (A => Boolean) => (List[A], List[A])
당신은 파티션을 볼 것입니다.
-
==============================
4.당신이 뭔가 조금 여분을해야하는 경우도 foldLeft을 사용할 수 있습니다. 파티션을 절단하지 않았을 때 난 그냥이 같은 일부 코드를 작성 :
당신이 뭔가 조금 여분을해야하는 경우도 foldLeft을 사용할 수 있습니다. 파티션을 절단하지 않았을 때 난 그냥이 같은 일부 코드를 작성 :
val list:List[Person] = /* get your list */ val (students,teachers) = list.foldLeft(List.empty[Student],List.empty[Teacher]) { case ((acc1, acc2), p) => p match { case s:Student => (s :: acc1, acc2) case t:Teacher => (acc1, t :: acc2) } }
-
==============================
5.당신이 2 개 이상의 조각으로 목록을 분할하고 경계를 무시하려는 경우, 당신은이 같은 (당신의 int를 검색해야하는 경우 수정)을 사용할 수 있습니다
당신이 2 개 이상의 조각으로 목록을 분할하고 경계를 무시하려는 경우, 당신은이 같은 (당신의 int를 검색해야하는 경우 수정)을 사용할 수 있습니다
def split(list_in: List[String], search: String): List[List[String]] = { def split_helper(accum: List[List[String]], list_in2: List[String], search: String): List[List[String]] = { val (h1, h2) = list_in2.span({x: String => x!= search}) val new_accum = accum :+ h1 if (h2.contains(search)) { return split_helper(new_accum, h2.drop(1), search) } else { return accum } } return split_helper(List(), list_in, search) } // TEST // split(List("a", "b", "c", "d", "c", "a"), {x: String => x != "x"})
from https://stackoverflow.com/questions/12148581/how-to-split-a-sequence-into-two-pieces-by-predicate by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 JodaTime와 특정 월의 마지막 날짜를 얻으려면? (0) | 2019.11.15 |
---|---|
[SCALA] 그들이 변경 후 어떻게 build.sbt에서 다시로드 종속성을하게 IntelliJ IDEA를 강제로? (0) | 2019.11.15 |
[SCALA] 어떻게 아이비 캐시 디렉토리를 구성하는 사용자 별 또는 시스템 전체? (0) | 2019.11.15 |
[SCALA] 스칼라 - XML에 중첩 된 요소를 수정 (0) | 2019.11.14 |
[SCALA] 스칼라 스트림과 같은 SQL ResultSet의 치료 (0) | 2019.11.14 |