दिलचस्प पोस्ट
SQL में यादृच्छिक पंक्ति का अनुरोध कैसे करें? टेम्पर्ड लर्बी टोकन – नकारात्मक लेटरहेड से पहले डॉट रखने के बारे में क्या भिन्न है जेवीएम, जेडीके, जेआरई और ओपन जेडीके में क्या अंतर है? अवलोकन जब उसमें आइटम बदलता है तब उसे नहीं देखा जा सकता (यहां तक ​​कि INotifyPropertyChanged के साथ) कैसे आईओएस संस्करण की जांच करने के लिए? स्विफ्ट में संपत्तियों को कैसे संग्रहीत किया जाए, वैसे ही मैं उद्देश्य-सी पर था? जावा में एसएमएस कैसे भेजें document.write पृष्ठ साफ करता है नक्शा एपीआई v2 के साथ मैपफ्रैग्मेंट प्रोग्रामेटिक रूप से आरंभ करें ओरेकल में कॉलमों को अल्पविराम विभाजित किए गए मान को विभाजित करें Node.js + Nginx – अब क्या? सी # में फ़ील्ड और संपत्ति में अंतर क्या है? प्रति चक्र में अधिकतम 4 एफएलओपी सैद्धांतिक अधिकतम कैसे प्राप्त करूं? कुछ अच्छा पायथन ओआरएम समाधान क्या हैं? बाश में एक फ़ाइल की सामग्री के माध्यम से लूपिंग

एनएसपीआरडीएक्स का प्रयोग एनएसएआरएआरएस पर आधारित एनएसएआरआरए फ़िल्टर करने के लिए

मेरे पास शब्दकोशों की एक सरणी है

मैं एक कुंजी के आधार पर सरणी को फ़िल्टर करना चाहता हूं।

मैंने यह कोशिश की:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == %@)", @"Football"]; NSArray *filteredArray = [data filteredArrayUsingPredicate:predicate]; 

यह काम नहीं करता है, मुझे कोई परिणाम नहीं मिलता। मुझे लगता है कि मैं कुछ गलत कर रहा हूँ मुझे पता है कि यह विधि है, यदि "खेल" एक ivar था। मुझे लगता है कि यह संभवतः अलग है यदि यह एक महत्वपूर्ण है

मैं हालांकि एक उदाहरण खोजने में सक्षम नहीं किया गया है

धन्यवाद


अद्यतन करें

मैंने उस स्ट्रिंग के चारों ओर उद्धरण जोड़े जो मैं खोज रहा हूं।

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SPORT == '%@')", @"Football"]; 

यह अब भी काम नहीं करता है।


अपडेट 2

उसे हल कर लिया। मुझे वास्तव में एकल उद्धरणों को निकालना पड़ा, जो कि गाइड के अनुसार क्या कहता है।

मेरी असली समस्या यह है कि मेरे पास नेस्टेड ऐरे हैं और मैं वास्तव में शब्दकोशों का मूल्यांकन नहीं कर रहा था अस्थि सिर चाल

वेब के समाधान से एकत्रित समाधान "एनएसपीआरडीएक्स का प्रयोग एनएसएआरएआरएस पर आधारित एनएसएआरआरए फ़िल्टर करने के लिए"

यह काम करना चाहिए – जब तक डेटा चर वास्तव में कुंजी सरणी के साथ एक शब्दकोश युक्त एक सरणी है

 NSArray *data = [NSArray arrayWithObject:[NSMutableDictionary dictionaryWithObject:@"foo" forKey:@"BAR"]]; NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(BAR == %@)", @"foo"]]; 

इस मामले में फ़िल्टर किए गए शब्दकोष में शामिल हैं

(% @ को उद्धृत नहीं करना पड़ता है, यह तब किया जाता है जब NSPdericate वस्तु बनाता है।)

मुझे पता है कि यह पुरानी खबर है लेकिन मेरे दो सेंट जोड़ने के लिए। डिफ़ॉल्ट रूप से मैं बस [c] बजाए कमांड [c] बजाए कमांड का उपयोग करता हूं। [d] उच्चारण चिह्नों के साथ अक्षरों की तुलना करता है यह विशेष रूप से मेरे वॉरकॉफ्ट ऐप में अच्छी तरह से काम करता है, जहां लोग अपना नाम "वाउदो" लिखते हैं, जिससे वे अपने नाम को तालिकाव्यू में खोजना लगभग असंभव बनाते हैं। [d] अपने उच्चारण चिह्नों को विधेय के दौरान स्ट्रिप्स करता है तो @"name LIKE[CD] %@", object.name एक वस्तु, वस्तु। नाम जहां object.name == @"voodoo" वस्तु को वौदोबो नाम देगी।

एप्पल प्रलेखन से: जैसे [सीडी] का अर्थ है "केस- और डाइरेक्टिक-असंवेदनशील।") स्ट्रिंग सिंटैक्स का एक पूरा विवरण और सभी ऑपरेटरों की एक सूची उपलब्ध है, प्रदीप्ति प्रारूप स्ट्रिंग सिंटैक्स देखें

 #import <Foundation/Foundation.h> // clang -framework Foundation Siegfried.m int main() { NSArray *arr = @[ @{@"1" : @"Fafner"}, @{@"1" : @"Fasolt"} ]; NSPredicate *p = [NSPredicate predicateWithFormat: @"SELF['1'] CONTAINS 'e'"]; NSArray *res = [arr filteredArrayUsingPredicate:p]; NSLog(@"Siegfried %@", res); return 0; } 

NSPredicate केवल iPhone 3.0 में उपलब्ध है।

डिवाइस पर चलने की कोशिश नहीं होने तक आप यह नहीं देखेंगे।

स्विफ्ट 3 के साथ, जब आप डिक्शनरी कुंजी और मूल्यों के आधार पर एक वर्डिकेट के साथ सरंचनाओं को फ़िल्टर करना चाहते हैं, तो आप निम्न में से एक पैटर्न चुन सकते हैं।


# 1। NSPredicate init(format:arguments:) का उपयोग करना init(format:arguments:) प्रारंभकर्ता

यदि आप उद्देश्य-सी से आते हैं, तो init(format:arguments:) कुंजीपटल का मूल्यांकन करने के लिए एक महत्वपूर्ण मूल्य कोडिंग शैली प्रदान करता है।

उपयोग:

 import Foundation let array = [["key1": "value1", "key2": "value2"], ["key1": "value3"], ["key3": "value4"]] let predicate = NSPredicate(format: "key1 == %@", "value1") //let predicate = NSPredicate(format: "self['key1'] == %@", "value1") // also works let filteredArray = array.filter(predicate.evaluate) print(filteredArray) // prints: [["key2": "value2", "key1": "value1"]] 

# 2। NSPredicate init(block:) प्रारंभकर्ता का उपयोग करना

एक विकल्प के रूप में यदि आप कसौटी टाइप किए एपीआई पर जोरदार टाइप एपीआई पसंद करते हैं, तो आप init(block:) initializer का उपयोग कर सकते हैं।

उपयोग:

 import Foundation let array = [["key1": "value1", "key2": "value2"], ["key1": "value3"], ["key3": "value4"]] let dictPredicate = NSPredicate(block: { (obj, _) in guard let dict = obj as? [String: String], let value = dict["key1"] else { return false } return value == "value1" }) let filteredArray = array.filter(dictPredicate.evaluate) print(filteredArray) // prints: [["key2": "value2", "key1": "value1"]] 

NSPredicate संदर्भ को देखते हुए, ऐसा लगता है कि आपको उद्धरण चिह्नों के साथ अपने प्रतिस्थापन चरित्र को घेरना होगा। उदाहरण के लिए, आपकी वर्तमान पादरी पढ़ती है: (SPORT == Football) आप इसे पढ़ना चाहते हैं (SPORT == 'Football') , इसलिए आपका प्रारूप स्ट्रिंग @"(SPORT == '%@')"