Scala의 목록 또는 배열의 한 요소에만 함수 적용

느릅 나무

예를 들어 주어진 목록 또는 배열에 대해

val list = (1 to 3).toList
val array = (1 to 3).toArray

예를 들어 컬렉션 유형에서 매핑되는 지정된 함수

def f(v: Int): Int = v + 10

신청 방법 f의 i 번째 요소 list또는 array그래서

list.myApply(f, ith = 2)
res: List(1,12,3)

그리고 또한

array.myApply(f, ith = 2)
res: Array(1,12,3)
크리스 마틴

tl; dr

import scala.collection.SeqLike
import scala.collection.generic.CanBuildFrom

implicit class Seq_[A, Repr, 
    S : ({type L[X] = X => SeqLike[A, Repr]})#L](seq: S) {

  def myApply[B >: A, That](f: A => B, ith: Int)
      (implicit bf: CanBuildFrom[Repr, B, That]): That =
    seq.updated(ith - 1, f(seq(ith - 1)))
}

토론

순진한 근사치 :

implicit class Seq_[A](seq: Seq[A]) {
  def myApply(f: A => A, ith: Int): Seq[A] =
    seq.updated(ith - 1, f(seq(ith - 1)))
}

사용 예 :

scala> (1 to 3).toList.myApply(_ + 10, ith = 2)
res: Seq[Int] = List(1, 12, 3)

시도한 실제 솔루션 :

implicit class Seq_[A, Repr <: SeqLike[A, Repr]](seq: Repr) {
  def myApply[B >: A, That](f: A => B, ith: Int)
                           (implicit bf: CanBuildFrom[Repr, B, That]): That =
    seq.updated(ith - 1, f(seq(ith - 1)))
}

불행히도 암시적인 것은 작동하지 않습니다. 이유를 잘 모르겠습니다.

scala> Seq_[Int, List[Int]]((1 to 3).toList).myApply(_ + 10, ith = 2)
res: List[Int] = List(1, 12, 3)

scala> Seq_[Int, List[Int]]((1 to 3).toList).myApply(_.toString + "*", ith = 2)
res: List[Any] = List(1, 2*, 3)

편집 : 수정했습니다!

implicit class Seq_[A, Repr](seq: SeqLike[A, Repr]) {
  def myApply[B >: A, That](f: A => B, ith: Int)
                           (implicit bf: CanBuildFrom[Repr, B, That]): That =
    seq.updated(ith - 1, f(seq(ith - 1)))
}

예:

scala> (1 to 3).toList.myApply(_ + 10, ith = 2)
res: List[Int] = List(1, 12, 3)

scala> (1 to 3).toVector.myApply(Math.pow(2, _), ith = 3)
res: scala.collection.immutable.Vector[AnyVal] = Vector(1, 2, 8.0)

하지만 난 그냥 당신은 또한에 대한 작업에 원하는 실현 Array되지 않습니다, SeqLike그래서 나를 좀 더 생각하자 ...

Ah, Predef has an implicit conversion from Array to ArrayOps, which is a subtype of SeqLike, so we just need to use a view bound.

implicit class Seq_[A, Repr <% SeqLike[A, Repr]](seq: Repr) {
  def myApply[B >: A, That](f: A => B, ith: Int)
                           (implicit bf: CanBuildFrom[Repr, B, That]): That =
    seq.updated(ith - 1, f(seq(ith - 1)))
}

And finally we have the right behavior:

scala> (1 to 3).toList.myApply(_ + 10, ith = 2)
res: List[Int] = List(1, 12, 3)

scala> (1 to 3).toArray.myApply(Math.pow(2, _), ith = 3)
res: Array[AnyVal] = Array(1, 2, 8.0)

Edit again - samthebest informs me that view bounds are deprecated, so using this guide we can replace it with a very ugly-looking context bound.

implicit class Seq_[A, Repr, 
    S : ({type L[X] = X => SeqLike[A, Repr]})#L](seq: S) {

  def myApply[B >: A, That](f: A => B, ith: Int)
      (implicit bf: CanBuildFrom[Repr, B, That]): That =
    seq.updated(ith - 1, f(seq(ith - 1)))
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

optim에 대한 목적 함수 내에서 sapply (또는 적용) 사용; 목록 요소의 개체가 더 이상 인식되지 않습니다.

분류에서Dev

목록의 모든 요소에 함수를 적용하여 새 열 만들기

분류에서Dev

Racket / Scheme-목록 목록의 각 요소에 함수 적용

분류에서Dev

목록 요소 조합에서 목록을 생성하기위한 적용 함수의 올바른 사용

분류에서Dev

목록 요소 조합에서 목록을 생성하기위한 적용 함수의 올바른 사용

분류에서Dev

한 번에 두 개의 목록 목록에 함수를 적용하는 방법은 무엇입니까?

분류에서Dev

R에서 벡터의 각 값에 대해 함수를 적용한 후 요인 목록을 반환하는 함수 만들기

분류에서Dev

Pandas : 열에 함수 목록 적용, 열당 하나의 함수

분류에서Dev

함수 결과가있는 조건이 참인 동안 목록의 요소에 함수 적용

분류에서Dev

Scala : 목록의 인접한 요소에 대한 작업에서 새 목록을 만드는 방법

분류에서Dev

문자형 벡터를 기반으로 목록의 다른 요소에 유사한 함수 적용

분류에서Dev

R의 목록에 함수를 적용하는 문제

분류에서Dev

OpenCV 함수 polylines ()를 C ++의 목록에 적용하는 방법

분류에서Dev

함수가있는 pandas df 열 내의 하위 목록에 중첩 된 for 루프를 사용한 목록 이해

분류에서Dev

Python-목록의 요소에 동일한 함수를 적용하는 가장 빠른 방법은 무엇입니까?

분류에서Dev

다른 열의 요소를 사용하여 한 열의 목록에서 인덱스를 반환하는 목록을 포함한 두 개의 팬더 열에 적용하는 방법은 무엇입니까?

분류에서Dev

목록에 대한 변수 이름을 사용하여 함수 내 목록 요소의 전역 할당

분류에서Dev

목록의 모든 요소에 함수를 다른 목록의 모든 요소에 적용

분류에서Dev

R의 목록에있는 모든 요소에 count 함수를 적용하는 방법은 무엇입니까?

분류에서Dev

동일한 유형의 모든 문자를 포함하는 배열 목록에서 요소 제거

분류에서Dev

R에서 두 목록의 요소 사이에 함수를 적용하는 방법은 무엇입니까?

분류에서Dev

사용자 정의 함수 목록에 대한 요약 목록 형식

분류에서Dev

함수의 add ()는 목록에 두 개의 요소 만 추가합니다.

분류에서Dev

목록 내의 목록에 함수 적용

분류에서Dev

목록 목록에 대한 함수 합계의 Python, 오류 또는 잘못된 출력

분류에서Dev

Haskell : 함수 목록 매개 변수의 각 요소에 대한 함수 수행

분류에서Dev

적절한 유형의 배열에서 하나의 항목을 반환하는 Typescript 함수

분류에서Dev

목록 / 배열의 각 항목에 대해 동일한 함수 실행

분류에서Dev

R에서 열의 함수 목록 적용

Related 관련 기사

  1. 1

    optim에 대한 목적 함수 내에서 sapply (또는 적용) 사용; 목록 요소의 개체가 더 이상 인식되지 않습니다.

  2. 2

    목록의 모든 요소에 함수를 적용하여 새 열 만들기

  3. 3

    Racket / Scheme-목록 목록의 각 요소에 함수 적용

  4. 4

    목록 요소 조합에서 목록을 생성하기위한 적용 함수의 올바른 사용

  5. 5

    목록 요소 조합에서 목록을 생성하기위한 적용 함수의 올바른 사용

  6. 6

    한 번에 두 개의 목록 목록에 함수를 적용하는 방법은 무엇입니까?

  7. 7

    R에서 벡터의 각 값에 대해 함수를 적용한 후 요인 목록을 반환하는 함수 만들기

  8. 8

    Pandas : 열에 함수 목록 적용, 열당 하나의 함수

  9. 9

    함수 결과가있는 조건이 참인 동안 목록의 요소에 함수 적용

  10. 10

    Scala : 목록의 인접한 요소에 대한 작업에서 새 목록을 만드는 방법

  11. 11

    문자형 벡터를 기반으로 목록의 다른 요소에 유사한 함수 적용

  12. 12

    R의 목록에 함수를 적용하는 문제

  13. 13

    OpenCV 함수 polylines ()를 C ++의 목록에 적용하는 방법

  14. 14

    함수가있는 pandas df 열 내의 하위 목록에 중첩 된 for 루프를 사용한 목록 이해

  15. 15

    Python-목록의 요소에 동일한 함수를 적용하는 가장 빠른 방법은 무엇입니까?

  16. 16

    다른 열의 요소를 사용하여 한 열의 목록에서 인덱스를 반환하는 목록을 포함한 두 개의 팬더 열에 적용하는 방법은 무엇입니까?

  17. 17

    목록에 대한 변수 이름을 사용하여 함수 내 목록 요소의 전역 할당

  18. 18

    목록의 모든 요소에 함수를 다른 목록의 모든 요소에 적용

  19. 19

    R의 목록에있는 모든 요소에 count 함수를 적용하는 방법은 무엇입니까?

  20. 20

    동일한 유형의 모든 문자를 포함하는 배열 목록에서 요소 제거

  21. 21

    R에서 두 목록의 요소 사이에 함수를 적용하는 방법은 무엇입니까?

  22. 22

    사용자 정의 함수 목록에 대한 요약 목록 형식

  23. 23

    함수의 add ()는 목록에 두 개의 요소 만 추가합니다.

  24. 24

    목록 내의 목록에 함수 적용

  25. 25

    목록 목록에 대한 함수 합계의 Python, 오류 또는 잘못된 출력

  26. 26

    Haskell : 함수 목록 매개 변수의 각 요소에 대한 함수 수행

  27. 27

    적절한 유형의 배열에서 하나의 항목을 반환하는 Typescript 함수

  28. 28

    목록 / 배열의 각 항목에 대해 동일한 함수 실행

  29. 29

    R에서 열의 함수 목록 적용

뜨겁다태그

보관