신속한 사전 키 배열
신속하게 사전의 키에서 문자열로 배열을 채우려 고합니다.
var componentArray: [String]
let dict = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("Components", ofType: "plist")!)
componentArray = dict.allKeys
'AnyObject'가 string과 동일하지 않은 오류를 리턴합니다.
또한 시도
componentArray = dict.allKeys as String
get : 'String'은 [String] (으)로 변환 할 수 없습니다
스위프트 3 & 스위프트 4
componentArray = Array(dict.keys) // for Dictionary
componentArray = dict.allKeys // for NSDictionary
Swift 3 Dictionary
에는 keys
속성이 있습니다. keys
다음과 같은 선언이 있습니다.
var keys: LazyMapCollection<Dictionary<Key, Value>, Key> { get }
사전의 키만 포함하는 컬렉션입니다.
참고 LazyMapCollection
즉 쉽게 매핑 할 수 있습니다 Array
와 Array
의 init(_:)
이니셜.
에서 NSDictionary
로[String]
다음 iOS AppDelegate
클래스 스 니펫은의 속성을 [String]
사용하여 문자열 배열 ( ) 을 얻는 방법을 보여줍니다 .keys
NSDictionary
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let string = Bundle.main.path(forResource: "Components", ofType: "plist")!
if let dict = NSDictionary(contentsOfFile: string) as? [String : Int] {
let lazyMapCollection = dict.keys
let componentArray = Array(lazyMapCollection)
print(componentArray)
// prints: ["Car", "Boat"]
}
return true
}
에서 [String: Int]
로[String]
보다 일반적인 방법으로 다음 놀이터 코드는 문자열 키와 정수 값 ( )이 있는 사전에서 속성을 [String]
사용하여 문자열 배열 ( ) 을 얻는 방법을 보여줍니다 .keys
[String: Int]
let dictionary = ["Gabrielle": 49, "Bree": 32, "Susan": 12, "Lynette": 7]
let lazyMapCollection = dictionary.keys
let stringArray = Array(lazyMapCollection)
print(stringArray)
// prints: ["Bree", "Susan", "Lynette", "Gabrielle"]
에서 [Int: String]
로[String]
다음 놀이터 코드는 정수 키와 문자열 값 ( )이 있는 사전에서 속성을 [String]
사용하여 문자열 배열 ( ) 을 얻는 방법을 보여줍니다 .keys
[Int: String]
let dictionary = [49: "Gabrielle", 32: "Bree", 12: "Susan", 7: "Lynette"]
let lazyMapCollection = dictionary.keys
let stringArray = Array(lazyMapCollection.map { String($0) })
// let stringArray = Array(lazyMapCollection).map { String($0) } // also works
print(stringArray)
// prints: ["32", "12", "7", "49"]
Swift의 사전 키 배열
componentArray = [String] (dict.keys)
dict.allKeys
문자열이 아닙니다. 그것은 [String]
오류 메시지가 알려주는 것과 정확히 같습니다 (물론 키 가 모두 문자열 이라고 가정하면 정확히 말했을 때 주장하는 것입니다).
따라서 componentArray
as 로 입력하는 것으로 시작 [AnyObject]
하십시오. 그것이 Cocoa API에서 입력되는 방식이기 때문입니다. 또는 dict.allKeys
캐스트하는 [String]
경우을 입력하십시오 componentArray
.
extension Array {
public func toDictionary<Key: Hashable>(with selectKey: (Element) -> Key) -> [Key:Element] {
var dict = [Key:Element]()
for element in self {
dict[selectKey(element)] = element
}
return dict
}
}
NSDictionary와는 인 클래스 (참고로 통과) 사전 인 구조 (값 통과 ) ======있는 NSDictionary에서 배열 ======
NSDictionary에는 allKeys가 있으며 allValues 는 [Any] 유형의 특성을 가져옵니다 .
let objesctNSDictionary =
NSDictionary.init(dictionary: ["BR": "Brazil", "GH": "Ghana", "JP": "Japan"])
let objectArrayOfAllKeys:Array = objesctNSDictionary.allKeys
let objectArrayOfAllValues:Array = objesctNSDictionary.allValues
print(objectArrayOfAllKeys)
print(objectArrayOfAllValues)
====== 사전에서 배열 ======
Dictionary의 키 및 값 속성에 대한 Apple 참조 .
let objectDictionary:Dictionary =
["BR": "Brazil", "GH": "Ghana", "JP": "Japan"]
let objectArrayOfAllKeys:Array = Array(objectDictionary.keys)
let objectArrayOfAllValues:Array = Array(objectDictionary.values)
print(objectArrayOfAllKeys)
print(objectArrayOfAllValues)
dict.keys.sorted()
[String] https://developer.apple.com/documentation/swift/array/2945003-sorted 를 제공합니다.
이 답변은 문자열 키가있는 빠른 사전에 대한 것입니다. 아래 이처럼 .
let dict: [String: Int] = ["hey": 1, "yo": 2, "sup": 3, "hello": 4, "whassup": 5]
여기에 사용할 확장이 있습니다.
extension Dictionary {
func allKeys() -> [String] {
guard self.keys.first is String else {
debugPrint("This function will not return other hashable types. (Only strings)")
return []
}
return self.flatMap { (anEntry) -> String? in
guard let temp = anEntry.key as? String else { return nil }
return temp }
}
}
그리고 나중에 이것을 사용하여 모든 키를 얻습니다.
let componentsArray = dict.allKeys()
공식 어레이 애플 문서에서 :
init(_:)
-시퀀스의 요소를 포함하는 배열을 만듭니다.
선언
Array.init<S>(_ s: S) where Element == S.Element, S : Sequence
매개 변수
s- 배열로 변환 할 요소의 순서
토론
이 이니셜 라이저를 사용하여 시퀀스 프로토콜을 따르는 다른 유형의 배열을 작성할 수 있습니다.이 이니셜 라이저를 사용하여 복잡한 시퀀스 또는 콜렉션 유형을 다시 배열로 변환 할 수도 있습니다. 예를 들어, 사전의 keys 속성은 자체 저장소가있는 배열이 아니며, 액세스 할 때만 사전에서 요소를 매핑하여 배열을 할당하는 데 필요한 시간과 공간을 절약하는 컬렉션입니다. 그러나 배열을 사용하는 메소드에 해당 키를 전달해야하는 경우이 이니셜 라이저를 사용하여 해당 목록을의 유형에서 변환하십시오
LazyMapCollection<Dictionary<String, Int>, Int> to a simple [String]
.
func cacheImagesWithNames(names: [String]) {
// custom image loading and caching
}
let namedHues: [String: Int] = ["Vermillion": 18, "Magenta": 302,
"Gold": 50, "Cerise": 320]
let colorNames = Array(namedHues.keys)
cacheImagesWithNames(colorNames)
print(colorNames)
// Prints "["Gold", "Cerise", "Magenta", "Vermillion"]"
// Old version (for history)
let keys = dictionary.keys.map { $0 }
let keys = dictionary?.keys.map { $0 } ?? [T]()
// New more explained version for our ducks
extension Dictionary {
var allKeys: [Dictionary.Key] {
return self.keys.map { $0 }
}
}
참고 URL : https://stackoverflow.com/questions/26386093/array-from-dictionary-keys-in-swift
'IT story' 카테고리의 다른 글
Java의 정적 메소드에서 클래스 이름 가져 오기 (0) | 2020.04.15 |
---|---|
Angularjs-ng-cloak / ng-show 요소가 깜박임 (0) | 2020.04.15 |
인 텐트의 모든 엑스트라 나열 (0) | 2020.04.15 |
지정된 문자의 첫 번째 인스턴스에서만 문자열 분리 (0) | 2020.04.15 |
Python FOR 루프 내에서 루프 수 얻기 (0) | 2020.04.15 |