programing

Swift 딕셔너리에 키가 포함되어 있는지 확인하고 해당 값 중 하나를 가져옵니다.

showcode 2023. 4. 15. 09:40
반응형

Swift 딕셔너리에 키가 포함되어 있는지 확인하고 해당 값 중 하나를 가져옵니다.

저는 현재 (빈) Swift 사전이 특정 키를 포함하고 있는지 여부를 판단하고 동일한 사전에서 하나의 값을 얻기 위해 다음과 같은 코드 조각을 사용하고 있습니다.

어떻게 Swift에서 이것을 더 우아하게 표현할 수 있을까?

// excerpt from method that determines if dict contains key
if let _ = dict[key] {
    return true
}
else {
    return false
}

// excerpt from method that obtains first value from dict
for (_, value) in dict {
    return value
}

사전에서 이미 수행 중인 작업이기 때문에 이 작업을 수행하는 데 특별한 코드가 필요하지 않습니다.가져올 때dict[key]사전이 키를 포함하는지 여부를 알 수 있습니다. 왜냐하면 반환되는 선택사항은nil(값도 포함되어 있습니다).

따라서 사전에 키가 포함되어 있는지 여부를 묻는 질문에만 답하려면 다음과 같이 질문합니다.

let keyExists = dict[key] != nil

값을 원하는 경우 사전에 키가 포함되어 있는 경우 다음과 같이 입력합니다.

let val = dict[key]!

그러나 일반적으로 키가 포함되어 있지 않은 경우에는 키를 가져와 사용하고 싶은 경우에만 다음과 같은 것을 사용합니다.if let:

if let val = dict[key] {
    // now val is not nil and the Optional has been unwrapped, so use it
}

간단히 확인하면 어떨까요?dict.keys.contains(key)? 확인 중dict[key] != nil값이 0인 경우에는 작동하지 않습니다.사전과 마찬가지로[String: String?]예를들면.

인정된 답변let keyExists = dict[key] != nil사전이 키를 포함하지만 값이 0인 경우 작동하지 않습니다.

사전에 키가 전혀 포함되어 있지 않은지 확인하려면 이 키를 사용하십시오(Swift 4에서 테스트됨).

if dict.keys.contains(key) {
  // contains key
} else { 
  // does not contain key
}

@matt에서 필요한 정보를 얻을 수 있을 것 같습니다만, 키의 값을 빠르게 취득할 수 있는 방법을 원하거나, 키가 존재하지 않는 경우는 첫 번째 값만 취득할 수 있습니다.

extension Dictionary {
    func keyedOrFirstValue(key: Key) -> Value? {
        // if key not found, replace the nil with 
        // the first element of the values collection
        return self[key] ?? first(self.values)
        // note, this is still an optional (because the
        // dictionary could be empty)
    }
}

let d = ["one":"red", "two":"blue"]

d.keyedOrFirstValue("one")  // {Some "red"}
d.keyedOrFirstValue("two")  // {Some "blue"}
d.keyedOrFirstValue("three")  // {Some "red”}

첫 번째 값으로 실제로 얻을 수 있는 값은 보장되지 않습니다. 이 경우 "빨간색"이 반환될 뿐입니다.

옵션의 NSAttribedString을 저장하는 캐시 구현을 위한 솔루션:

public static var attributedMessageTextCache    = [String: NSAttributedString?]()

    if attributedMessageTextCache.index(forKey: "key") != nil
    {
        if let attributedMessageText = TextChatCache.attributedMessageTextCache["key"]
        {
            return attributedMessageText
        }
        return nil
    }

    TextChatCache.attributedMessageTextCache["key"] = .some(.none)
    return nil

키 값을 반환하려면 이 확장자를 사용할 수 있습니다.

extension Dictionary {
    func containsKey(_ key: Key) -> Value? {
        if let index = index(forKey: key){
            return self.values[index]
        }
        return nil
    }
}
if dictionayTemp["quantity"] != nil
    {

  //write your code
    }

키의 값이 0인 사전을 취급하고 있는 경우는, 다음의 방법으로 키의 존재를 확인할 수 있습니다.

dictionay.index(forKey: item.key) != nil

사전에서 첫 번째 값을 가져오는 경우:

dictionay.first?.value // optional since dictionary might be empty

언급URL : https://stackoverflow.com/questions/28129401/determining-if-swift-dictionary-contains-key-and-obtaining-any-of-its-values

반응형