2017-01-27 7 views
5

में एक स्ट्रिंग में एकाधिक शब्द खोजें मेरे पास स्विफ्ट 3 में एक लंबी स्ट्रिंग है और यह जांचना है कि इसमें शब्द 0 और शब्द 2 है या नहीं। यह 2 से अधिक खोज शब्द भी हो सकता है। मुझे निम्नलिखित समाधान मिला:स्विफ्ट

var Text = "Hello Swift-world" 
var TextArray = ["Hello", "world"] 
var count = 0 

for n in 0..<TextArray.count { 
    if (Text.contains(TextArray[n])) { 
     count += 1 
    } 
} 

if (count == TextArray.count) { 
    print ("success") 
} 

लेकिन यह बहुत जटिल लगता है, क्या इसे हल करने का कोई आसान तरीका नहीं है? (Xcode8 और swift3)

+4

ध्यान दें कि चर नाम होना चाहिए 'lowerCamelCase', आप के आसपास कोष्ठक का उपयोग करने के लिए यदि स्थिति और एक सरणी से अधिक पुनरावृति करने के लिए आप बस कह सकते हैं' सरणी में तत्व के लिए की जरूरत नहीं है {...} '। – Hamish

उत्तर

5

आप देख रहे हैं कम कोड के लिए:

let text = "Hello Swift-world" 
let wordList = ["Hello", "world"] 

let success = !wordList.contains(where: { !text.contains($0) }) 
print(success) 

यह आपके समाधान से थोड़ा अधिक कुशल है क्योंकि contains विधि "निहित" शब्द जैसे ही मिलता है।

2

एक और अधिक Swifty समाधान उसके बाद यह एक न के बराबर शब्द पाया खोज बंद हो जाएगा:

var text = "Hello Swift-world" 
var textArray = ["Hello", "world"] 

let match = textArray.reduce(true) { !$0 ? false : (text.range(of: $1) != nil) } 

यह करने के लिए एक और तरीका है जिसके बाद यह एक गैर मिलान पाया बंद हो जाता है:

let match = textArray.first(where: { !text.contains($0) }) == nil 
+1

ध्यान दें कि यह एक गैर-मिलान खोजने के बाद पुन: प्रयास नहीं करेगा। – Hamish

+0

यह पुनरावृत्ति को रोक नहीं पाएगा, लेकिन वे पुनरावृत्तियों तेज होंगे क्योंकि वे 'text.range (of:)' –

1

एक और संभावना is regular expressions:

// *'s are wildcards 
let regexp = "(?=.*Hello*)(?=.*world*)" 

if let range = Text.range(of:regexp, options: .regularExpression) { 
    print("this string contains Hello world") 
} else { 
    print("this string doesn't have the words we want") 
} 
+0

का आह्वान नहीं करेंगे यदि आप उस गतिशील शब्द सूची (शायद उपयोगकर्ता इनपुट से) के साथ उस मार्ग पर जाते हैं तो आप इसका उपयोग कर सकते हैं विशेष वर्णों के साथ समस्याओं से बचने के लिए 'NSRegularExpression.escapedPterntern (for:) '। –