Hedef c'deki dize dizisinde dize araması


87

Hedef c'deki dizeler dizisinde belirli bir dizeyi aramak istiyorum. Biri bana bu konuda yardım edebilir mi?


Bu senin ödevin mi Bence bunu yapmak kolay. Neden sadece döngü yapıp karşılaştıralım?
vodkhang

na, bu ödev değil, iphone'da çok fazla kaynağa mal olmayan belirli bir dizeyi aramak için en iyi algoritmaya ihtiyacım vardı, bu yüzden soruyu sordum
Filthy Knight

Yanıtlar:


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

ya da nerede olduğunu bilmen gerekiyorsa

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

NSArray ile ilgili belgeleri okumanızı şiddetle tavsiye ederim . Sorunuzu göndermeden önce bunu yapmak en iyisidir :-)


NSArray * myArr = [[NSArray ayırma] initWithObjects: @ "test1", @ "test3", @ "test3", nil] içeren bir dizim olduğunu varsayalım; "tes" aramak istedim, diyelim o zaman işe yarayacak bir joker karakter istedim, anlayamadım, bu yüzden bu soruyu sordum, ama cevabın için teşekkürler
Filthy Knight,

Ya her bir değeri döngüleyip test edersiniz ya da koleksiyon nesneleri için oldukça kapsamlı arama sağlayan NSPredicate'e bakarsınız - neredeyse SQL where cümleleri kadar güçlüdür. developer.apple.com/mac/library/documentation/cocoa/Conceptual/…
JeremyP

45

Dize dizisindeki dizeleri aramak için NSPredicate sınıfını kullanabilirsiniz. Aşağıdaki örnek koda bakın.

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];

Bu, dizeler dizisindeki dizeleri aramanın en verimli yoludur


bu küçük diziler için iyi çalışıyor ancak çok büyük bir diziniz varsa (30.000'den fazla kayıt) herhangi bir fikriniz olabilir
amit gupta

Daha sonra diziyi sıralı tutun ve yeni elemanlar bulmak ve eklemek için ikili arama (bsearch) kullanın. NSArray / NSMutableArray bunun için yöntemlere sahiptir.
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];

Bu kod parçacığı soruyu yanıtlasa da, bu yanıtın sitenin gelecekteki ziyaretçileri için yararlı olması için soruyu nasıl yanıtladığına dair bir açıklama eklemek daha iyidir
RobV

Bu kod parçası, kelimeyi bir dizi kelimede bulmak için iyi çalışıyor.
Rahul K Rajan

Bunu ilk metinle yapmak istiyorum. Demek istediğim, arama metninin herhangi bir yerden başlayarak eşleştirilmesi gerekiyor. Lütfen yardım edin
Gautam Shrivastav
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.