배열이 이런 식으로 있다고 가정 해 봅시다 : [1,4,7,4,2,2,4,7,1,2]
.같은 원소로 배열을 작은 배열로 나눕니다.
result = [[1,1],[4,4,4],[7,7],[2,2,2]]
:
는 I는 신속한이 같은 결과를 도시하므로 동일한 요소 배열이 배열로 분할하는 기능을해야한다.
어떻게 신속하게 처리 할 수 있습니까? 미리 감사드립니다
배열이 이런 식으로 있다고 가정 해 봅시다 : [1,4,7,4,2,2,4,7,1,2]
.같은 원소로 배열을 작은 배열로 나눕니다.
result = [[1,1],[4,4,4],[7,7],[2,2,2]]
:
는 I는 신속한이 같은 결과를 도시하므로 동일한 요소 배열이 배열로 분할하는 기능을해야한다.
어떻게 신속하게 처리 할 수 있습니까? 미리 감사드립니다
도우미 사전을 사용하여 배열의 값을 적절한 저장소로 분류 할 수 있습니다. 예 :
let arr = [1, 4, 7, 4, 2, 2, 4, 7, 1, 2]
var dict: [Int: [Int]] = [:]
arr.forEach { dict[$0] = (dict[$0] ?? []) + [$0] }
let inBins = dict.map{ $1 }.sorted{ $0.first ?? 0 < $1.first ?? 0 }
print(inBins) // [[1, 1], [2, 2, 2], [4, 4, 4], [7, 7]]
또는 @Hamish에 링크 스레드에서 허용 대답에 설명 된대로 분류하는 부분에 대한 일반적인 Sequence
확장자를 사용합니다 :
예 :
/* from https://stackoverflow.com/a/39388832/4573247:
@mientus's Swift 3 translation of @oisdk's accepted answer */
public extension Sequence {
func categorise<U : Hashable>(_ key: (Iterator.Element) -> U) -> [U:[Iterator.Element]] {
var dict: [U:[Iterator.Element]] = [:]
for el in self {
let key = key(el)
if case nil = dict[key]?.append(el) { dict[key] = [el] }
}
return dict
}
}
let arr = [1, 4, 7 ,4, 2, 2, 4, 7, 1, 2]
let inBins = arr.categorise{ $0 }.map{ $1 }.sorted{ $0.first ?? 0 < $1.first ?? 0 }
print(inBins) // [[1, 1], [2, 2, 2], [4, 4, 4], [7, 7]]
빈을 분류 할 필요가 없습니다 (위와 동일)? 두 옵션은 위의 다음 (단순히 마지막 sortin 부분을 삭제)로 감소됩니다
// ... first alternative above
let inBins = dict.map{ $1 }
// ... 2nd alternative above
let inBins = arr.categorise{ $0 }.map{ $1 }
는 또 다른 옵션은 생성 될 수있는 NSCountedSet
: 당신은 다음 쉽게 각각의 고유의 수를 얻을 수
let array = [1,4,7,4,2,2,4,7,1,2]
let countedSet = NSCountedSet(array: array)
요소 :
let countForOne = countedSet.count(for: 1)
내가 아는 한 NSCountedSet
의 기본 Swift 제품은 아직 없습니다.
[Swift에서 배열 요소로 그룹화하는 방법] (http://stackoverflow.com/questions/31220002/how-to-group-by-the-elements-of-an-array)을 살펴보십시오. -in-swift) - 그룹화 된 요소 사전을 생성합니다. 거기에서 그룹화 배열을 얻는 간단한 단계입니다. – Hamish
@Hamish 문제가있는 경우, 그는 저녁 만 먹거나 발사하므로 filterArrays의 수를 알 수 있습니다. 그러나 필자의 경우 filterArrays의 수를 알지 못합니다. 그 배열은 단지 예제 일뿐입니다. –
질문이 아니라 대답을보십시오. 대답은 여러 그룹으로 나뉩니다. – Hamish