2015-06-14 7 views
11

मेरे पास एक स्ट्रिंग है जिसमें कई स्ट्रिंग हैं। मैंने (नीचे देखें) का उपयोग यह जांचने के लिए किया है कि सरणी में कोई निश्चित स्ट्रिंग मौजूद है या नहीं, हालांकि मैं यह जांचना चाहता हूं कि स्ट्रिंग का हिस्सा सरणी में है या नहीं?जांचें कि क्या सरणी में स्ट्रिंग का हिस्सा है?

itemsArray = ["Google, Goodbye, Go, Hello"] 

searchToSearch = "go" 

if contains(itemsArray, stringToSearch) { 
    NSLog("Term Exists") 
} 
else { 
    NSLog("Can't find term") 
} 

ऊपर कोड बस की जाँच करता है अगर एक मूल्य अपनी संपूर्णता में सरणी के भीतर मौजूद है लेकिन मैं खोजने के लिए "Google, Google and Go"

उत्तर

14

इस तरह का प्रयास करना चाहते हैं।

let itemsArray = ["Google", "Goodbye", "Go", "Hello"] 
let searchToSearch = "go" 

let filteredStrings = itemsArray.filter({(item: String) -> Bool in 

    var stringMatch = item.lowercaseString.rangeOfString(searchToSearch.lowercaseString) 
    return stringMatch != nil ? true : false 
}) 

filteredStrings में मिलान वाले उप स्ट्रिंग वाले तारों की सूची होगी।

स्विफ्ट Array संरचना फ़िल्टर विधि प्रदान करता है, जो फ़िल्टरिंग मानदंड फ़िल्टरिंग के आधार पर प्रदान की गई सरणी फ़िल्टर करेगा।

+0

यह आपकी समस्या का समाधान हुआ? – Amit89

+0

इसके लिए धन्यवाद। खोज के परिणामस्वरूप सरणी में कुछ भी स्पष्ट रूप से जांचने के लिए मैं कैसे जांचूँगा? –

+0

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो आप परिणाम सरणी फ़िल्टर किए गए स्ट्रिंग्स में गीलेर को देखने के लिए गिनती का उपयोग कर सकते हैं। इसका उपयोग करें - filteredStrings.count – Amit89

16

सबसे पहले, आपने एक स्ट्रिंग के साथ एक सरणी परिभाषित की है। क्या आप शायद चाहते

let itemsArray = ["Google", "Goodbye", "Go", "Hello"] 

तो फिर तुम contains(array, predicate) और rangeOfString() का उपयोग कर सकते है - वैकल्पिक रूप से .CaseInsensitiveSearch साथ - सरणी में प्रत्येक स्ट्रिंग की जाँच करने के अगर यह खोज स्ट्रिंग शामिल हैं:

let itemExists = contains(itemsArray) { 
    $0.rangeOfString(searchToSearch, options: .CaseInsensitiveSearch) != nil 
} 

println(itemExists) // true 

या, यदि आप हां/नहीं परिणामस्वरूप मेल खाने वाले आइटमों के साथ एक सरणी चाहते हैं तो परिणाम:

let matchingTerms = filter(itemsArray) { 
    $0.rangeOfString(searchToSearch, options: .CaseInsensitiveSearch) != nil 
} 

println(matchingTerms) // [Google, Goodbye, Go] 
स्विफ्ट 3 के लिए

अद्यतन:

let itemExists = itemsArray.contains(where: { 
    $0.range(of: searchToSearch, options: .caseInsensitive) != nil 
}) 
print(itemExists) 

let matchingTerms = itemsArray.filter({ 
    $0.range(of: searchToSearch, options: .caseInsensitive) != nil 
}) 
print(matchingTerms) 
+0

'युक्त' में 'throw' क्यों है? क्या यह सच या गलत नहीं है? – Honey

+0

@ हनी: आप शामिल() विधि में फेंकने का बंद कर सकते हैं। अगर बंद करने से कोई त्रुटि फेंकता है तो इसे() द्वारा पुनर्स्थापित किया जाता है। - https://stackoverflow.com/questions/43305051/what-are-the-differences-between-throws-and-rethrows-in-swift की तुलना करें। –

8

इस तरह की कोशिश करो।

स्विफ्ट 3,0

import UIKit 

let itemsArray = ["Google", "Goodbye", "Go", "Hello"] 

var filterdItemsArray = [String]() 


func filterContentForSearchText(searchText: String) { 
    filterdItemsArray = itemsArray.filter { item in 
     return item.lowercased().contains(searchText.lowercased()) 
    } 
} 

filterContentForSearchText(searchText: "Go") 
print(filterdItemsArray) 

आउटपुट

["Google", "Goodbye", "Go"] 
+0

कृपया [वही उत्तर] पोस्ट करें (http://stackoverflow.com/a/40399381/2227743) कई बार। यदि किसी प्रश्न के पास पहले से ही एक मौजूदा उत्तर है, तो * फिर से जवाब देने के बजाय प्रश्न को डुप्लिकेट * के रूप में चिह्नित करें। धन्यवाद। – Moritz

+0

अरे धन्यवाद @ एरिक आया मैं इसे करूँगा। –

संबंधित मुद्दे