2015-09-21 25 views
7

Tôi có một cuốn từ điển định nghĩa là:Swift từ điển Get Key cho giá trị

let drinks = [String:[String]]() 

drinks = ["Soft Drinks": ["Cocoa-Cola", "Mountain Dew", "Sprite"], 
"Juice" :["Orange", "Apple", "Grape"]] 

Làm thế nào tôi có thể nhận được chìa khóa, cho một giá trị nhất định.

let key = (drinks as NSDictionary).allKeysForObject("Orange") as! String 
print(key) 
//Returns an empty Array. Should return "Juice" 

Trả lời

15
func findKeyForValue(value: String, dictionary: [String: [String]]) ->String? 
{ 
    for (key, array) in dictionary 
    { 
     if (array.contains(value)) 
     { 
      return key 
     } 
    } 

    return nil 
} 

Gọi chức năng trên mà sẽ trả về một chuỗi tùy chọn?

let drinks = ["Soft Drinks": ["Cocoa-Cola", "Mountain Dew", "Sprite"], 
     "Juice" :["Orange", "Apple", "Grape"]] 

print(self.findKeyForValue("Orange", dictionary: drinks)) 

Chức năng này sẽ chỉ trả lại khóa đầu tiên của mảng có giá trị được chuyển.

+0

Giải Quyết vấn đề của tôi. Cảm ơn bạn. – Statik

+1

Chỉ trả lại khóa đầu tiên ngay cả khi có nhiều hơn một khóa. – zaph

+0

func findKeysForValue (giá trị: Chuỗi, từ điển: [Chuỗi: [Chuỗi]]) -> [Chuỗi] { var keys = [String]() cho (khóa, mảng) trong từ điển { if (array. chứa (giá trị)) { keys.append (key) }} phím trở lại } – abintom

2

Liệt kê tất cả các mục nhập từ điển và kiểm tra từng giá trị cho giá trị bạn muốn và tích lũy khóa có giá trị.

Ví dụ, tìm tất cả các loại đồ uống có chứa giá trị mong muốn trong một danh sách:

let drinks = [ 
    "Soft Drinks": ["Orange", "Cocoa-Cola", "Mountain Dew", "Sprite"], 
    "Juice" :["Apple", "Grape"] 
] 

let value = "Orange" 

var keys = [String]() 
for (key, list) in drinks { 
    if (list.contains(value)) { 
     keys.append(key) 
    } 
} 

print("keys: \(keys)") 

phím: [ "Soft Drinks"]

8

Trong Swift 2.0, bạn có thể lọc từ điển và sau đó ánh xạ kết quả vào một mảng.

let keys = drinks.filter { 
    return $0.1.contains("Orange") 
}.map { 
    return $0.0 
} 

Kết quả sẽ là một mảng đối tượng String đại diện cho các phím phù hợp.

+1

Hoạt động, trả về trả về tất cả các khóa có giá trị khớp nhưng khó hiểu. – zaph

+0

"Bí ẩn" là một từ khắc nghiệt xem xét bộ lọc và bản đồ là các hàm bậc cao hơn. Cú pháp là lỗi thời ngày nay, nhưng đó là về nó –

-2

thử này (nhanh chóng):

(dic as NSDictionary).allKeysForObject(<#T##anObject: AnyObject##AnyObject#>) 

nó làm việc cho tôi

+0

(đồ uống như NSDictionary) .allKeysForObject ("Orange") trả về một mảng trống, không phải "Juice" theo yêu cầu. bằng cách này, nó được viết trong câu hỏi. xin vui lòng, xác minh câu trả lời của bạn trong một sân chơi hoặc một cách khác, trước khi xuất bản. – user3441734

+0

thư giãn. tôi chỉ viết một mẫu chung để giúp người khác có một câu hỏi tương tự. tôi không viết bất kỳ tham số nào. bạn đọc quá nhiều vào câu trả lời của tôi –

Các vấn đề liên quan