การค้นหาสตริงในสตริงอาร์เรย์ในวัตถุประสงค์ c


87

ฉันต้องการค้นหาสตริงเฉพาะในอาร์เรย์ของสตริงในวัตถุประสงค์ c. ใครสามารถช่วยฉันในเรื่องนี้?


มันคือการบ้านของคุณ? ฉันคิดว่าเป็นเรื่องง่ายที่จะทำ ทำไมต้องวนซ้ำและเปรียบเทียบ?
vodkhang

na ไม่ใช่การบ้านฉันต้องการอัลกอริทึมที่ดีที่สุดในการค้นหาสตริงเฉพาะซึ่งใช้ทรัพยากรไม่มากใน iphone นั่นคือเหตุผลที่ฉันตั้งคำถาม
Filthy Knight

เป็นไปได้ที่จะซ้ำกันของObjective-C Search NSArray for String?
nielsbot

คำตอบ:


193
BOOL isTheObjectThere = [myArray containsObject: @"my string"];

หรือหากคุณต้องการทราบว่าอยู่ที่ไหน

NSUInteger indexOfTheObject = [myArray indexOfObject: @"my string"];

ผมขอแนะนำให้คุณอ่านเอกสารเกี่ยวกับ NSArray ทางที่ดีควรทำก่อนโพสต์คำถามของคุณ :-)


สมมติว่าฉันมีอาร์เรย์ที่มี NSArray * myArr = [[NSArray จัดสรร] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; ฉันต้องการค้นหา "tes" สมมติว่าฉันต้องการให้ไวลด์การ์ดทำงานได้ซึ่งฉันไม่เข้าใจฉันจึงถามคำถามนี้ แต่ขอบคุณสำหรับการตอบกลับชื่นชม
Filthy Knight

คุณสามารถวนซ้ำและทดสอบแต่ละค่าหรือดูใน NSPredicate ซึ่งให้การค้นหาวัตถุคอลเลกชันที่ค่อนข้างครอบคลุม - มีประสิทธิภาพเกือบเท่ากับ SQL ที่ส่วนคำสั่ง developer.apple.com/mac/library/documentation/cocoa/Conceptual/…
JeremyP

45

คุณสามารถใช้คลาส NSPredicate เพื่อค้นหาสตริงในอาร์เรย์ของสตริง ดูโค้ดตัวอย่างด้านล่าง

NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Maruthi",@"Hyundai", @"Ford", @"Benz", @"BMW",@"Toyota",nil];

NSString *stringToSearch = @"i";

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",stringToSearch]; // if you need case sensitive search avoid '[c]' in the predicate

NSArray *results = [cars filteredArrayUsingPredicate:predicate];

นี่เป็นวิธีที่มีประสิทธิภาพที่สุดสำหรับการค้นหาสตริงในอาร์เรย์ของสตริง


ใช้งานได้ดีสำหรับอาร์เรย์ขนาดเล็ก แต่ถ้าคุณมีอาร์เรย์ขนาดใหญ่มาก (มากกว่า 30k บันทึก) คุณสามารถมีความคิดได้หรือไม่
amit gupta

จากนั้นให้เรียงลำดับอาร์เรย์และใช้การค้นหาแบบไบนารี (bsearch) เพื่อค้นหาตำแหน่งและสำหรับการแทรกองค์ประกอบใหม่ NSArray / NSMutableArray มีวิธีการดังกล่าว
spstanley

3
NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Max",@"Hai", @"Fine", @"Bow", @"Bomb",@"Toy",nil];

NSString *searchText = @"i";
 NSArray *results = [cars filteredArrayUsingPredicate:predicate];

// if you need case sensitive search avoid '[c]' in the predicate

 NSPredicate *resultPredicate = [NSPredicate
                                predicateWithFormat:@"title contains[c] %@",
                                searchText];


searchResults = [cars  filteredArrayUsingPredicate:resultPredicate];

แม้ว่าข้อมูลโค้ดนี้อาจตอบคำถามได้ แต่ควรใส่คำอธิบายว่าจะตอบคำถามอย่างไรเพื่อให้คำตอบนี้มีประโยชน์ต่อผู้เยี่ยมชมไซต์ในอนาคต
RobV

โค้ดชิ้นนี้ใช้งานได้ดีในการค้นหาคำในอาร์เรย์ของคำ
Rahul K Rajan

ฉันต้องการทำสิ่งนี้กับข้อความเริ่มต้น ฉันหมายความว่าข้อความค้นหาจะต้องตรงกันตั้งแต่เริ่มต้นไม่ใช่จากที่ใด โปรดช่วย
Gautam Shrivastav
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.