سؤال

أرغب في البحث من خلال NSArray الخاص بي للحصول على سلسلة معينة.

مثال:

NSArray لديه الكائنات: "الكلب"، "القط"، "كلب الدهون"، "شيء"، "شيء آخر"، "هيك هنا شيء آخر"

أريد البحث عن كلمة "أخرى" ووضع النتائج في صفيف واحد، ولها الآخر، غير النتائج، إلى صفيف آخر يمكن تصفيته أبعد من ذلك.

هل كانت مفيدة؟

المحلول

لم يتم اختباره، لذلك قد يكون لديك خطأ في بناء الجملة، ولكن ستحصل على الفكرة.

NSArray* inputArray = [NSArray arrayWithObjects:@"dog", @"cat", @"fat dog", @"thing", @"another thing", @"heck here's another thing", nil];

NSMutableArray* containsAnother = [NSMutableArray array];
NSMutableArray* doesntContainAnother = [NSMutableArray array];

for (NSString* item in inputArray)
{
  if ([item rangeOfString:@"another"].location != NSNotFound)
    [containsAnother addObject:item];
  else
    [doesntContainAnother addObject:item];
}

نصائح أخرى

إذا كانت السلاسل داخل الصفيف معروفة بأنها متميزة، يمكنك استخدام مجموعات. nsset أسرع ثم nsarray على المدخلات الكبيرة:

NSArray * inputArray = [NSMutableArray arrayWithObjects:@"one", @"two", @"one again", nil];

NSMutableSet * matches = [NSMutableSet setWithArray:inputArray];
[matches filterUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains[c] 'one'"]];

NSMutableSet * notmatches = [NSMutableSet setWithArray:inputArray];
[notmatches  minusSet:matches];

لن يعمل لأنه لكل وثيقة "indexofobjectimenticalto:" إرجاع فهرس الكائن الأول الذي يحتوي على نفس عنوان الذاكرة مثل الكائن الذي تمر به.

تحتاج إلى اجتياز صفيفك ومقارنتها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top