어떻게이 프로그래밍 로직을 함수 메쏘드 서명에 쓸 수 있습니까? 조건이 충족 될 때까지 배열을 반복/통과하려고 시도하고 그 조건을 위반합니다. 대부분 var
및 breakable
을 scala.util.control.Breaks
에서 피하기 위해 최선을 다하고 있습니다. 조건/술어가 충족되는지 확인하기 위해 클로저 (이 경우 dictionary
)를 사용합니다. 아이디어는 술어가 만날 때까지 배열을 반복하고 있다는 것입니다. 또한 배열을 목록으로 변환하는 것을 피합니다. 배열을 사용하면 배열을 이어 붙일 수 없습니다. 예를 들어, 패턴 일치를 할 수 있습니까? 여기 var 또는 breakable 없음 : 배열 탐색에서 조건자가 충족 될 때 "중단"하는 방법?
val dictionary = Array.fill(128)(false)
def isUnique(array: Array[Char]): Option[Char] = {
// traverse each element of the array {
// if a character.toInt is in the dictionary, insert into dictionary
// exit loop, with the character which broke the loop
// else
// set dictionary(character.toInt) to true and continue looping
// }
}
는 예를 들어, 사용 사례입니다 :
val word = "abcdefggghijklmnopqrstuvqxyz".toArray
val charThatBrokeIt = isUnique(word)
편집 : 제안 또는 부울, 튜플, 케이스 클래스로,뿐만 아니라 다른 반환 형식을 제안 자유롭게 또는 다른 어떤 것. Option[Char]
은 내 결과가 좋지 않을 수 있습니다. 예를 들어. 루프가 일찌감치 (단락)했을 경우에는 false
을 돌려 줄지도 모릅니다.
거기에 대한 답변은'var'을 사용합니다. 나는'var'을 피하기 위해 최선을 다하고 있습니다. var를 사용하지 않는 링크로부터의 유일한 응답은 긴 tail tail recursive 패턴 매칭을 사용하는 fresskoma 때문입니다. – Angelito
더 나은 질문 제목에 대한 제안 사항이 있으면 알려주십시오. 그들은 중복되지 않습니다. – Angelito
리턴 타입'Option [Char]'는 최적의 타입이 아닐 수도 있으므로, 그 타입도 자유롭게 편집하십시오. 패턴 적용에 적용되거나 적용되지 않을 수있는 사례 클래스에 반환 된 값을 래핑하는 것과 같은 다른 솔루션에 대해서는 찬반 양론이있을 수 있음을 알고 있습니다. – Angelito