Swift와 같은 배열된 벽장을 처리하는 방법(map,sort,filter)을 배웠다.
12094 단어 Swift
역시 벽장에 대해 잘 모르는 의식을 가지고 있군.
옷장은 도대체 무엇이냐
전에도 이런 Qita 기사를 썼는데 이 단계는 교과서의 정의를 알고 있지만
그렇다면 구체적으로 사용된 상황은...?아직 잘 모르겠어요.
이럴 때는 배열 처리를 할 때 추가 요소를 일일이 순환시킨다
나는 맵이라는 물건을 매개 변수에 넣으면 한 줄만 있으면 실현할 수 있다는 것을 안다
에이, 벽장이 강하니까 공부를 했지.
Swift 같지 않은 맞춤법
맵으로 쓰지 않으면 이런 느낌이에요.
2D 배열로 표준 입력//1 3 1
//3 2 2
//2 3 5
//3 4 4
//1 6 6
//こんな標準入力が与えられるので、[[1,3,1],[3,2,2],...]みたいな感じで初期化したい
let numberOfInputLines = 5
var input_lines = [String]() //標準入力をとりあえず受け取る
var outArray: [[Int]] = [[Int]]() //変換先の二次元配列
for i in 0..<numberOfInputLines {
input_lines.append(readLine()!)
let splits: [String] = input_lines[i].components(separatedBy: " ")
outArray.append([Int(splits[0])!, Int(splits[1])! , Int(splits[2])!])
}
print(outArray) //[[1, 3, 1], [3, 2, 2], [2, 3, 5], [3, 4, 4], [1, 6, 6]]
지금도 하고 싶은 게 있지만.
//1 3 1
//3 2 2
//2 3 5
//3 4 4
//1 6 6
//こんな標準入力が与えられるので、[[1,3,1],[3,2,2],...]みたいな感じで初期化したい
let numberOfInputLines = 5
var input_lines = [String]() //標準入力をとりあえず受け取る
var outArray: [[Int]] = [[Int]]() //変換先の二次元配列
for i in 0..<numberOfInputLines {
input_lines.append(readLine()!)
let splits: [String] = input_lines[i].components(separatedBy: " ")
outArray.append([Int(splits[0])!, Int(splits[1])! , Int(splits[2])!])
}
print(outArray) //[[1, 3, 1], [3, 2, 2], [2, 3, 5], [3, 4, 4], [1, 6, 6]]
Swift 같은 맞춤법
맵으로 하면 이렇게 쓸 수 있어요.
표준 입력을 2차원 배열로 설정하기 (맵 버전)let numberOfInputLines = 5
var input_lines = [String]()
var splits = [[String]]() //for文の外に
for i in 0..<numberOfInputLines {
input_lines.append(readLine()!)
splits.append(input_lines[i].components(separatedBy: " ")) //[["1", "3", "1"], ["3", "2", "2"], ["2", "3", "5"], ["3", "4", "4"], ["1", "6", "6"]]
}
let outArray = splits.map { [Int($0[0])!, Int($0[1])!, Int($0[2])!] }
/*
2019/1/21 追記
splitsという配列をつくっていますが、mapを二重で使うと不要です。
ただちょっと説明しづらいですね。。。
let outArray = input_lines.map { $0.components(separatedBy: " ").map { Int($0)! } }
*/
print(outArray) //[[1, 3, 1], [3, 2, 2], [2, 3, 5], [3, 4, 4], [1, 6, 6]]
미안합니다. 생각해 봤는데 좋은 샘플이 아니에요.
paiza의 A 문제를 해결할 때는 이렇게 처리해야 한다.
맵 해독
흔히 볼 수 있는 서법let outArray = splits.map { [Int($0[0])!, Int($0[1])!, Int($0[2])!] }
그럼, 맵의 작법에 관해서 여러분은 뜻을 아십니까?
나는 전혀 모른다.
왜 이해가 안 되는지 알아봤는데 많은 걸 생략해서.
모두 생략할 필요가 없습니다. 지루하게 쓰면 맵은 다음과 같습니다.
일부러 벽장 을 전부 생략하고 장황하게 썼다let outArray = splits.map({ (element: [String]) -> [Int] in
return [Int(element[0])!, Int(element[1])!, Int(element[2])!]
})
분위기 완전 바뀌었네.
하지만 하는 일은 똑같다.
일일이 이렇게 써야 한다면 맵을 쓰지 마세요.
순환이 끊이지 않아도appeend는 변하지 않을 것이다.
그럼, 뭘 생략했냐면 하나씩 보세요.
1. 트레이링 벽장
먼저 최초의 문법에서
.map은 분명 함수입니다.맵()을 쓸 괄호가 없네요.
이것은 트레이 링 벽장이라고 불리는 기법이다
함수의 마지막 인자가 복제된 경우 () 밖에서 쓸 수 있습니다.
만약 벽장이 매개 변수라면 지루하고 장황한 문법으로 알 수 있다
{} 바깥쪽은 () 싸야 합니다. 읽을 수 없습니다.
2. 근거형 추론의 생략
옷장에는 매개 변수와 반환값이 있다
다른 사람이 쓴 코드를 보니 너무 정확하게 쓴 경우가 적은 것 같다.
원래 맵의 함수 정의는 다음과 같다.
map의 함수 정의func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
Aray형은 맵이라는 방법이 있어요.
Aray형의 요소들을 옷장에 포함된 형태로 받습니다.
어떻게 된 일인지 모르게 처리해서 마지막으로 Arreay 형식으로 돌려드리겠습니다. 이것이 바로 맵입니다.
그림으로 이렇게 처리됐습니다.
벽장의 매개 변수와 반환값은 추론을 할 수 있기 때문에 생략할 수 있습니다.
이 경우 스트링형의 1차원 배열을 요소로 수용한다
Int형의 1차원 배열로 토출되어 최종적으로 [Int]의 2차원 배열이 된다.
만약 프로그램에서 컴파일러가 형식을 추측할 수 없는 처리를 썼다면 컴파일 오류가 발생할 수 있습니다.
3. 매개변수 이름 단순화
지루한 기법이라면 요소라는 매개 변수 이름을 사용하여 배열의 각 요소를 수신합니다.
옷장은 간소화 파라미터 이름을 사용할 수 있다.
0달러로 배열된 요소를 표시합니다.
이것을 사용하면 상술한 요소라는 매개 변수 이름을 생략할 수 있습니다.
매개변수 이름을 생략한 경우에도 in 키워드를 함께 생략하는 습관이 있는 것 같습니다.
4. 억제된 return(Implicit Returns)
많이 생략해도 되는데.
마지막으로 리턴도 지워.
문장이 한 문장만 있다면 클론은 계산 결과를 출력으로 되돌려줍니다.
기본 리턴(Implicit Returns)이라고 합니다.
이렇게 해석하면 최초의 생략 형식이 어떻게 많은 정보를 생략한 간결한 문법인지 알 수 있다.
sort 및 fileter
의외의 맵 설명으로 시간을 낭비했기 때문에.
애초에 sort랑 Filter도 조사한 결과를 쓰고 싶어요.
좀 피곤하니까 참고 사이트를 보세요.
sort나 Filter라면 벽장에 조건을 지정할 수 있습니다.
함수형 문법에 대한 개인적인 소감
화제가 돼도하스켈을 쓴 소녀.
함수형 프로그래밍의 기법을 소개하였다
확실히 약간의 어려운 처리 방법을 간결하게 쓸 수 있어서 나는 매우 기쁘다.
그냥 그거예요. 코드만 있는 것 같아요. 예쁘면.
(언어가 다르다)
연기가 좋아지지 않을 것 같아요.
맵/sort/filter를 사용할 수 없어도 제어 파일로 대체할 수 있습니다
간신히 스위프트로 쓰면 능숙하게 써줬으면 좋겠다.
사이트 축소판 그림
애플 공식
Swift의 맵, Filter, Reduce(등)는 이럴 때 사용합니다!
Reference
이 문제에 관하여(Swift와 같은 배열된 벽장을 처리하는 방법(map,sort,filter)을 배웠다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/st43/items/3791b109f4e5914cd655
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let numberOfInputLines = 5
var input_lines = [String]()
var splits = [[String]]() //for文の外に
for i in 0..<numberOfInputLines {
input_lines.append(readLine()!)
splits.append(input_lines[i].components(separatedBy: " ")) //[["1", "3", "1"], ["3", "2", "2"], ["2", "3", "5"], ["3", "4", "4"], ["1", "6", "6"]]
}
let outArray = splits.map { [Int($0[0])!, Int($0[1])!, Int($0[2])!] }
/*
2019/1/21 追記
splitsという配列をつくっていますが、mapを二重で使うと不要です。
ただちょっと説明しづらいですね。。。
let outArray = input_lines.map { $0.components(separatedBy: " ").map { Int($0)! } }
*/
print(outArray) //[[1, 3, 1], [3, 2, 2], [2, 3, 5], [3, 4, 4], [1, 6, 6]]
흔히 볼 수 있는 서법
let outArray = splits.map { [Int($0[0])!, Int($0[1])!, Int($0[2])!] }
그럼, 맵의 작법에 관해서 여러분은 뜻을 아십니까?나는 전혀 모른다.
왜 이해가 안 되는지 알아봤는데 많은 걸 생략해서.
모두 생략할 필요가 없습니다. 지루하게 쓰면 맵은 다음과 같습니다.
일부러 벽장 을 전부 생략하고 장황하게 썼다
let outArray = splits.map({ (element: [String]) -> [Int] in
return [Int(element[0])!, Int(element[1])!, Int(element[2])!]
})
분위기 완전 바뀌었네.하지만 하는 일은 똑같다.
일일이 이렇게 써야 한다면 맵을 쓰지 마세요.
순환이 끊이지 않아도appeend는 변하지 않을 것이다.
그럼, 뭘 생략했냐면 하나씩 보세요.
1. 트레이링 벽장
먼저 최초의 문법에서
.map은 분명 함수입니다.맵()을 쓸 괄호가 없네요.
이것은 트레이 링 벽장이라고 불리는 기법이다
함수의 마지막 인자가 복제된 경우 () 밖에서 쓸 수 있습니다.
만약 벽장이 매개 변수라면 지루하고 장황한 문법으로 알 수 있다
{} 바깥쪽은 () 싸야 합니다. 읽을 수 없습니다.
2. 근거형 추론의 생략
옷장에는 매개 변수와 반환값이 있다
다른 사람이 쓴 코드를 보니 너무 정확하게 쓴 경우가 적은 것 같다.
원래 맵의 함수 정의는 다음과 같다.
map의 함수 정의
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
Aray형은 맵이라는 방법이 있어요.Aray형의 요소들을 옷장에 포함된 형태로 받습니다.
어떻게 된 일인지 모르게 처리해서 마지막으로 Arreay 형식으로 돌려드리겠습니다. 이것이 바로 맵입니다.
그림으로 이렇게 처리됐습니다.
벽장의 매개 변수와 반환값은 추론을 할 수 있기 때문에 생략할 수 있습니다.
이 경우 스트링형의 1차원 배열을 요소로 수용한다
Int형의 1차원 배열로 토출되어 최종적으로 [Int]의 2차원 배열이 된다.
만약 프로그램에서 컴파일러가 형식을 추측할 수 없는 처리를 썼다면 컴파일 오류가 발생할 수 있습니다.
3. 매개변수 이름 단순화
지루한 기법이라면 요소라는 매개 변수 이름을 사용하여 배열의 각 요소를 수신합니다.
옷장은 간소화 파라미터 이름을 사용할 수 있다.
0달러로 배열된 요소를 표시합니다.
이것을 사용하면 상술한 요소라는 매개 변수 이름을 생략할 수 있습니다.
매개변수 이름을 생략한 경우에도 in 키워드를 함께 생략하는 습관이 있는 것 같습니다.
4. 억제된 return(Implicit Returns)
많이 생략해도 되는데.
마지막으로 리턴도 지워.
문장이 한 문장만 있다면 클론은 계산 결과를 출력으로 되돌려줍니다.
기본 리턴(Implicit Returns)이라고 합니다.
이렇게 해석하면 최초의 생략 형식이 어떻게 많은 정보를 생략한 간결한 문법인지 알 수 있다.
sort 및 fileter
의외의 맵 설명으로 시간을 낭비했기 때문에.
애초에 sort랑 Filter도 조사한 결과를 쓰고 싶어요.
좀 피곤하니까 참고 사이트를 보세요.
sort나 Filter라면 벽장에 조건을 지정할 수 있습니다.
함수형 문법에 대한 개인적인 소감
화제가 돼도하스켈을 쓴 소녀.
함수형 프로그래밍의 기법을 소개하였다
확실히 약간의 어려운 처리 방법을 간결하게 쓸 수 있어서 나는 매우 기쁘다.
그냥 그거예요. 코드만 있는 것 같아요. 예쁘면.
(언어가 다르다)
연기가 좋아지지 않을 것 같아요.
맵/sort/filter를 사용할 수 없어도 제어 파일로 대체할 수 있습니다
간신히 스위프트로 쓰면 능숙하게 써줬으면 좋겠다.
사이트 축소판 그림
애플 공식
Swift의 맵, Filter, Reduce(등)는 이럴 때 사용합니다!
Reference
이 문제에 관하여(Swift와 같은 배열된 벽장을 처리하는 방법(map,sort,filter)을 배웠다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/st43/items/3791b109f4e5914cd655
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
화제가 돼도하스켈을 쓴 소녀.
함수형 프로그래밍의 기법을 소개하였다
확실히 약간의 어려운 처리 방법을 간결하게 쓸 수 있어서 나는 매우 기쁘다.
그냥 그거예요. 코드만 있는 것 같아요. 예쁘면.
(언어가 다르다)
연기가 좋아지지 않을 것 같아요.
맵/sort/filter를 사용할 수 없어도 제어 파일로 대체할 수 있습니다
간신히 스위프트로 쓰면 능숙하게 써줬으면 좋겠다.
사이트 축소판 그림
애플 공식
Swift의 맵, Filter, Reduce(등)는 이럴 때 사용합니다!
Reference
이 문제에 관하여(Swift와 같은 배열된 벽장을 처리하는 방법(map,sort,filter)을 배웠다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/st43/items/3791b109f4e5914cd655
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Swift와 같은 배열된 벽장을 처리하는 방법(map,sort,filter)을 배웠다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/st43/items/3791b109f4e5914cd655텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)