سؤال

ما أريد القيام به يبدو بسيطًا جدًا، لكن لا يمكنني العثور على أي إجابات على الويب.انا لدي NSMutableArray من الكائنات، ولنفترض أنها كائنات "شخصية".أريد فرز NSMutableArray بواسطة Person.birthDate وهو NSDate.

أعتقد أن له علاقة بهذه الطريقة:

NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(???)];

في Java، أود أن أجعل كائني يطبق Comparable، أو استخدم Collections.sort مع مقارنة مخصصة مضمنة... كيف يمكنك القيام بذلك في Objective-C؟

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

المحلول

طريقة المقارنة

إما أن تقوم بتنفيذ طريقة مقارنة لكائنك:

- (NSComparisonResult)compare:(Person *)otherObject {
    return [self.birthDate compare:otherObject.birthDate];
}

NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)];

NSSortDescriptor (أفضل)

أو عادة أفضل:

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"birthDate"
                                           ascending:YES];
NSArray *sortedArray = [drinkDetails sortedArrayUsingDescriptors:@[sortDescriptor]];

يمكنك الفرز بسهولة حسب مفاتيح متعددة عن طريق إضافة أكثر من مفتاح إلى المصفوفة.من الممكن أيضًا استخدام طرق المقارنة المخصصة.القي نظرة على وثائق.

كتل (لامعة!)

هناك أيضًا إمكانية الفرز باستخدام كتلة منذ نظام التشغيل Mac OS X 10.6 وiOS 4:

NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSDate *first = [(Person*)a birthDate];
    NSDate *second = [(Person*)b birthDate];
    return [first compare:second];
}];

أداء

ال -compare: وستكون الطرق المبنية على الكتل أسرع قليلاً بشكل عام من الاستخدام NSSortDescriptor حيث أن الأخير يعتمد على KVC.الميزة الأساسية لل NSSortDescriptor الطريقة هي أنها توفر طريقة لتحديد ترتيب الفرز الخاص بك باستخدام البيانات، بدلاً من التعليمات البرمجية، مما يجعل من السهل على سبيل المثال.قم بإعداد الأشياء حتى يتمكن المستخدمون من فرز ملف NSTableView من خلال النقر على صف الرأس.

نصائح أخرى

واطلع على طريقة NSMutableArray <لأ href = "http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#//apple_ref/doc/uid/20000138- BABCEEJD "يختلط =" noreferrer "> sortUsingFunction:context:

وسوف تحتاج إلى إنشاء <م> مقارنة وظيفة التي تأخذ كائنين (من نوع Person، منذ كنت مقارنة كائنين Person) و<م> السياق المعلمة.

والكائنات هما حالات فقط من Person. الكائن الثالث هو سلسلة، على سبيل المثال @ "تاريخ الميلاد".

وهذه الدالة بإرجاع NSComparisonResult: إنه يعود NSOrderedAscending إذا PersonA.birthDate <PersonB.birthDate. فإنه سيعود NSOrderedDescending إذا PersonA.birthDate> PersonB.birthDate. وأخيرا، فإنه سيعود NSOrderedSame إذا PersonA.birthDate == PersonB.birthDate.

وهذا هو شبة الكود الخام؛ سوف تحتاج إلى تجسيد ما يعنيه لتاريخ واحد ليكون "أقل"، "أكثر" أو "على قدم المساواة" إلى موعد آخر (مثل مقارنة ثواني منذ عصر-الخ.):

NSComparisonResult compare(Person *firstPerson, Person *secondPerson, void *context) {
  if ([firstPerson birthDate] < [secondPerson birthDate])
    return NSOrderedAscending;
  else if ([firstPerson birthDate] > [secondPerson birthDate])
    return NSOrderedDescending;
  else 
    return NSOrderedSame;
}

إذا كنت تريد شيئا أكثر إحكاما، يمكنك استخدام مشغلي الثلاثي:

NSComparisonResult compare(Person *firstPerson, Person *secondPerson, void *context) {
  return ([firstPerson birthDate] < [secondPerson birthDate]) ? NSOrderedAscending : ([firstPerson birthDate] > [secondPerson birthDate]) ? NSOrderedDescending : NSOrderedSame;
}

ورمز مصدر ربما يعجل هذا الأمر قليلا، وإذا قمت بذلك كثيرا.

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

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

NSArray *sorted = [_scores sortedArrayUsingComparator:^(id obj1, id obj2){
    if ([obj1 isKindOfClass:[Score class]] && [obj2 isKindOfClass:[Score class]]) {
        Score *s1 = obj1;
        Score *s2 = obj2;

        if (s1.points > s2.points) {
            return (NSComparisonResult)NSOrderedAscending;
        } else if (s1.points < s2.points) {
            return (NSComparisonResult)NSOrderedDescending;
        }
    }

    // TODO: default is the same?
    return (NSComparisonResult)NSOrderedSame;
}];

return sorted;

وPS: هذا هو الترتيب تنازليا

.

وابتداء من عام دائرة الرقابة الداخلية 4 يمكنك أيضا استخدام كتل للفرز.

لهذا المثال بالذات أفترض أن الكائنات في مجموعة الخاصة بك لديها طريقة موقف '، والتي ترجع إلى NSInteger.

NSArray *arrayToSort = where ever you get the array from... ;
NSComparisonResult (^sortBlock)(id, id) = ^(id obj1, id obj2) 
{
    if ([obj1 position] > [obj2 position]) 
    { 
        return (NSComparisonResult)NSOrderedDescending;
    }
    if ([obj1 position] < [obj2 position]) 
    {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
};
NSArray *sorted = [arrayToSort sortedArrayUsingComparator:sortBlock];

ملحوظة: سيتم autoreleased على "مرتبة" مجموعة

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

وهذا يعمل مثل السحر:

NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"crimeScene.distance" ascending:YES];
[self.arrAnnotations sortUsingDescriptors:[NSArray arrayWithObject:sorter]];

وهناك خطوة في عداد المفقودين في <لأ href = "https://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it/805589#805589" > جورج Schölly في الجواب الثاني ، لكنه يعمل بشكل جيد ثم.

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"birthDate"
                                              ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingDescriptor:sortDescriptors];
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"birthDate" ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingDescriptors:sortDescriptors];

شكرا، انها تعمل بشكل جيد ...

التحف Person الخاصة بك حاجة إلى تطبيق أسلوب، ويقول compare: الذي يأخذ الكائن Person أخرى، والعودة NSComparisonResult وفقا للعلاقة بين الكائنات 2.

وبعد ذلك سوف استدعاء sortedArrayUsingSelector: مع @selector(compare:) وينبغي أن يتم ذلك.

وهناك طرق أخرى، ولكن بقدر ما أعرف ليس هناك الكاكاو-EQUIV واجهة Comparable. باستخدام sortedArrayUsingSelector: وربما أكثر الطرق مؤلمة للقيام بذلك.

ودائرة الرقابة الداخلية 4 كتل سيوفر لك:)

featuresArray = [[unsortedFeaturesArray sortedArrayUsingComparator: ^(id a, id b)  
{
    DMSeatFeature *first = ( DMSeatFeature* ) a;
    DMSeatFeature *second = ( DMSeatFeature* ) b;

    if ( first.quality == second.quality )
        return NSOrderedSame;
    else
    {
        if ( eSeatQualityGreen  == m_seatQuality || eSeatQualityYellowGreen == m_seatQuality || eSeatQualityDefault  == m_seatQuality )
        {
            if ( first.quality < second.quality )
                return NSOrderedAscending;
            else
                return NSOrderedDescending;
        }
        else // eSeatQualityRed || eSeatQualityYellow
        {
            if ( first.quality > second.quality )
                return NSOrderedAscending;
            else
                return NSOrderedDescending;
        } 
    }
}] retain];

http://sokol8.blogspot.com/2011 /04/sorting-nsarray-with-blocks.html قليلا من وصف

لNSMutableArray، استخدم الطريقة sortUsingSelector. فإنه فرز أنه مكان، دون إنشاء مثيل جديد.

ويمكنك استخدام الطريقة التالية لعام الغرض الخاص. يجب أن تحل مشكلتك.

//Called method
-(NSMutableArray*)sortArrayList:(NSMutableArray*)arrDeviceList filterKeyName:(NSString*)sortKeyName ascending:(BOOL)isAscending{
    NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:sortKeyName ascending:isAscending];
    [arrDeviceList sortUsingDescriptors:[NSArray arrayWithObject:sorter]];
    return arrDeviceList;
}

//Calling method
[self sortArrayList:arrSomeList filterKeyName:@"anything like date,name etc" ascending:YES];

إذا كنت مجرد فرز مجموعة من NSNumbers، يمكنك فرز عليها مع 1 المكالمة:

[arrayToSort sortUsingSelector: @selector(compare:)];

وهذا يعمل لأن الكائنات في مجموعة (كائنات NSNumber) على تنفيذ أسلوب المقارنة. هل يمكن أن تفعل نفس الشيء للأجسام NSString، أو حتى لمجموعة من الأشياء البيانات المخصصة التي تقوم بتطبيق أسلوب المقارنة.

وفيما يلي بعض الأمثلة التعليمات البرمجية باستخدام كتل المقارنة. فإنه فرز مجموعة من القواميس حيث يتضمن كل القاموس رقم في "sort_key" مفتاح.

#define SORT_KEY @\"sort_key\"

[anArray sortUsingComparator: 
 ^(id obj1, id obj2) 
  {
  NSInteger value1 = [[obj1 objectForKey: SORT_KEY] intValue];
  NSInteger value2 = [[obj2 objectForKey: SORT_KEY] intValue];
  if (value1 > value2) 
{
  return (NSComparisonResult)NSOrderedDescending;
  }

  if (value1 < value2) 
{
  return (NSComparisonResult)NSOrderedAscending;
  }
    return (NSComparisonResult)NSOrderedSame;
 }];

ورمز أعلاه يمر عبر العمل للحصول على قيمة عددية لكل مفتاح فرز ومقارنتها، كمثال على كيفية القيام بذلك. منذ الأجسام NSNumber تنفيذ أسلوب المقارنة، فإنه يمكن إعادة كتابة أكثر من ذلك بكثير ببساطة:

 #define SORT_KEY @\"sort_key\"

[anArray sortUsingComparator: 
^(id obj1, id obj2) 
 {
  NSNumber* key1 = [obj1 objectForKey: SORT_KEY];
  NSNumber* key2 = [obj2 objectForKey: SORT_KEY];
  return [key1 compare: key2];
 }];

وأو يمكن حتى أن تستخلص الجسم من المقارنة الى 1 السطر:

  return [[obj1 objectForKey: SORT_KEY] compare: [obj2 objectForKey: SORT_KEY]];

وأنا أميل إلى تفضيل بيانات بسيطة والكثير من المتغيرات المؤقتة لأن التعليمات البرمجية أسهل في القراءة، وأسهل التصحيح. مترجم يحسن بعيدا عن المتغيرات المؤقتة على أي حال، لذلك ليس هناك ميزة لإصدار الكل في سطر واحد.

ولقد خلق مكتبة صغيرة من أساليب الفئة، ودعا LINQ إلى سي-الكائنية ، التي تجعل هذا النوع من شيء أكثر سهولة. باستخدام طريقة الفرز مع محدد رئيسي، يمكنك ترتيب النتائج بحسب birthDate كما يلي:

NSArray* sortedByBirthDate = [input sort:^id(id person) {
    return [person birthDate];
}]

ولقد فعلت الفرز متعددة المستويات استنادا إلى متطلبات العرف.

و// فرز القيم

    [arrItem sortUsingComparator:^NSComparisonResult (id a, id b){

    ItemDetail * itemA = (ItemDetail*)a;
    ItemDetail* itemB =(ItemDetail*)b;

    //item price are same
    if (itemA.m_price.m_selling== itemB.m_price.m_selling) {

        NSComparisonResult result=  [itemA.m_itemName compare:itemB.m_itemName];

        //if item names are same, then monogramminginfo has to come before the non monograme item
        if (result==NSOrderedSame) {

            if (itemA.m_monogrammingInfo) {
                return NSOrderedAscending;
            }else{
                return NSOrderedDescending;
            }
        }
        return result;
    }

    //asscending order
    return itemA.m_price.m_selling > itemB.m_price.m_selling;
}];

https://sites.google.com/site/greateindiaclub/ موبيل-التطبيقات / دائرة الرقابة الداخلية / multilevelsortinginiosobjectivec

ولقد استعملت على sortUsingFunction :: في بعض مشاريعي:

int SortPlays(id a, id b, void* context)
{
    Play* p1 = a;
    Play* p2 = b;
    if (p1.score<p2.score) 
        return NSOrderedDescending;
    else if (p1.score>p2.score) 
        return NSOrderedAscending;
    return NSOrderedSame;
}

...
[validPlays sortUsingFunction:SortPlays context:nil];
-(NSMutableArray*) sortArray:(NSMutableArray *)toBeSorted 
{
  NSArray *sortedArray;
  sortedArray = [toBeSorted sortedArrayUsingComparator:^NSComparisonResult(id a, id b) 
  {
    return [a compare:b];
 }];
 return [sortedArray mutableCopy];
}

ويمكنك استخدام NSSortDescriptor لفرز على NSMutableArray مع كائنات مخصصة

 NSSortDescriptor *sortingDescriptor;
 sortingDescriptor = [[NSSortDescriptor alloc] initWithKey:@"birthDate"
                                       ascending:YES];
 NSArray *sortArray = [drinkDetails sortedArrayUsingDescriptors:@[sortDescriptor]];

والفرز NSMutableArray هو بسيط جدا:

NSMutableArray *arrayToFilter =
     [[NSMutableArray arrayWithObjects:@"Photoshop",
                                       @"Flex",
                                       @"AIR",
                                       @"Flash",
                                       @"Acrobat", nil] autorelease];

NSMutableArray *productsToRemove = [[NSMutableArray array] autorelease];

for (NSString *products in arrayToFilter) {
    if (fliterText &&
        [products rangeOfString:fliterText
                        options:NSLiteralSearch|NSCaseInsensitiveSearch].length == 0)

        [productsToRemove addObject:products];
}
[arrayToFilter removeObjectsInArray:productsToRemove];

فرز باستخدام NSComparator

إذا أردنا فرز الكائنات المخصصة التي نحتاج إلى توفيرها NSComparator, ، والذي يُستخدم لمقارنة الكائنات المخصصة.تقوم الكتلة بإرجاع ملف NSComparisonResult القيمة للدلالة على ترتيب الكائنين.وذلك من أجل فرز مجموعة كاملة NSComparator يستخدم على النحو التالي.

NSArray *sortedArray = [employeesArray sortedArrayUsingComparator:^NSComparisonResult(Employee *e1, Employee *e2){
    return [e1.firstname compare:e2.firstname];    
}];

فرز باستخدام NSSortDescriptor
لنفترض، على سبيل المثال، أن لدينا مصفوفة تحتوي على مثيلات لفئة مخصصة، لدى الموظف سمات واسم العائلة والعمر.يوضح المثال التالي كيفية إنشاء NSSortDescriptor الذي يمكن استخدامه لفرز محتويات المصفوفة بترتيب تصاعدي حسب مفتاح العمر.

NSSortDescriptor *ageDescriptor = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
NSArray *sortDescriptors = @[ageDescriptor];
NSArray *sortedArray = [employeesArray sortedArrayUsingDescriptors:sortDescriptors];

فرز باستخدام المقارنات المخصصة
الأسماء عبارة عن سلاسل، وعندما تقوم بفرز السلاسل لتقديمها للمستخدم، يجب عليك دائمًا استخدام المقارنة المترجمة.غالبًا ما تريد أيضًا إجراء مقارنة غير حساسة لحالة الأحرف.هنا يأتي مثال مع (localizedStandardCompare :) لترتيب المصفوفة حسب الاسم الأخير والاسم الأول.

NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc]
              initWithKey:@"lastName" ascending:YES selector:@selector(localizedStandardCompare:)];
NSSortDescriptor * firstNameDescriptor = [[NSSortDescriptor alloc]
              initWithKey:@"firstName" ascending:YES selector:@selector(localizedStandardCompare:)];
NSArray *sortDescriptors = @[lastNameDescriptor, firstNameDescriptor];
NSArray *sortedArray = [employeesArray sortedArrayUsingDescriptors:sortDescriptors];

للرجوع إليها والمناقشة التفصيلية يرجى الرجوع إلى:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/SortDescriptors/Articles/Creating.html
http://www.ios-blog.co.uk/tutorials/objective-c/how-to-sort-nsarray-with-custom-objects/

والبروتوكولات سويفت والبرمجة الوظيفية يجعل من السهل جدا أن يكون لديك فقط لجعل صفك مطابقة للبروتوكول للمقارنة، وتنفيذ الطرق التى ينص عليها البروتوكول ثم استخدام مرتبة (بواسطة:) وظيفة الترتيب العالي لخلق مجموعة وفرزها دون تحتاج إلى استخدام المصفوفات قابلة للتغيير من جانب الطريق.

class Person: Comparable {
    var birthDate: NSDate?
    let name: String

    init(name: String) {
        self.name = name
    }

    static func ==(lhs: Person, rhs: Person) -> Bool {
        return lhs.birthDate === rhs.birthDate || lhs.birthDate?.compare(rhs.birthDate as! Date) == .orderedSame
    }

    static func <(lhs: Person, rhs: Person) -> Bool {
        return lhs.birthDate?.compare(rhs.birthDate as! Date) == .orderedAscending
    }

    static func >(lhs: Person, rhs: Person) -> Bool {
        return lhs.birthDate?.compare(rhs.birthDate as! Date) == .orderedDescending
    }

}

let p1 = Person(name: "Sasha")
p1.birthDate = NSDate() 

let p2 = Person(name: "James")
p2.birthDate = NSDate()//he is older by miliseconds

if p1 == p2 {
    print("they are the same") //they are not
}

let persons = [p1, p2]

//sort the array based on who is older
let sortedPersons = persons.sorted(by: {$0 > $1})

//print sasha which is p1
print(persons.first?.name)
//print James which is the "older"
print(sortedPersons.first?.name)

في حالتي، وأنا استخدم "sortedArrayUsingComparator" لفرز صفيف. نظرة على الكود بالأسفل.

contactArray = [[NSArray arrayWithArray:[contactSet allObjects]] sortedArrayUsingComparator:^NSComparisonResult(ContactListData *obj1, ContactListData *obj2) {
    NSString *obj1Str = [NSString stringWithFormat:@"%@ %@",obj1.contactName,obj1.contactSurname];
    NSString *obj2Str = [NSString stringWithFormat:@"%@ %@",obj2.contactName,obj2.contactSurname];
    return [obj1Str compare:obj2Str];
}];

وأيضا الكائن بلدي هو،

@interface ContactListData : JsonData
@property(nonatomic,strong) NSString * contactName;
@property(nonatomic,strong) NSString * contactSurname;
@property(nonatomic,strong) NSString * contactPhoneNumber;
@property(nonatomic) BOOL isSelected;
@end

فرز المصفوفة في سويفت


ل Swifty الشخص أدناه هو أسلوب نظيف للغاية لتحقيق الهدف أعلاه عالميًا.دعونا نحصل على مثال لفئة مخصصة من User والتي لها بعض الصفات.

class User: NSObject {
    var id: String?
    var name: String?
    var email: String?
    var createdDate: Date?
}

الآن لدينا مصفوفة نحتاج إلى فرزها على أساسها createdDate إما تصاعدي و/أو تنازلي.لذلك دعونا نضيف وظيفة لمقارنة التاريخ.

class User: NSObject {
    var id: String?
    var name: String?
    var email: String?
    var createdDate: Date?
    func checkForOrder(_ otherUser: User, _ order: ComparisonResult) -> Bool {
        if let myCreatedDate = self.createdDate, let othersCreatedDate = otherUser.createdDate {
            //This line will compare both date with the order that has been passed.
            return myCreatedDate.compare(othersCreatedDate) == order
        }
        return false
    }
}

الآن دعونا نحصل على extension ل Array ل User.بكلمات بسيطة، دعنا نضيف بعض الأساليب فقط لتلك المصفوفات التي تحتوي فقط على User الكائنات فيه.

extension Array where Element: User {
    //This method only takes an order type. i.e ComparisonResult.orderedAscending
    func sortUserByDate(_ order: ComparisonResult) -> [User] {
        let sortedArray = self.sorted { (user1, user2) -> Bool in
            return user1.checkForOrder(user2, order)
        }
        return sortedArray
    }
}

الاستخدام للترتيب التصاعدي

let sortedArray = someArray.sortUserByDate(.orderedAscending)

الاستخدام للترتيب التنازلي

let sortedArray = someArray.sortUserByDate(.orderedAscending)

الاستخدام لنفس الطلب

let sortedArray = someArray.sortUserByDate(.orderedSame)

الطريقة أعلاه في extension لن يكون من الممكن الوصول إليها إلا إذا Array هو من النوع [User] || Array<User>

وأنت لديك لإنشاء sortDescriptor وبعد ذلك يمكنك فرز nsmutablearray باستخدام sortDescriptor مثل أدناه.

 let sortDescriptor = NSSortDescriptor(key: "birthDate", ascending: true, selector: #selector(NSString.compare(_:)))
 let array = NSMutableArray(array: self.aryExist.sortedArray(using: [sortDescriptor]))
 print(array)

استخدم مثل هذه الكائنات المتداخلة،

NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastRoute.to.lastname" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSMutableArray *sortedPackages = [[NSMutableArray alloc]initWithArray:[packages sortedArrayUsingDescriptors:@[sortDescriptor]]];

وlastRoute هو كائن واحد وهذا الكائن يحمل في الاعتراض، أن الاعتراض عقد سلسلة القيم اللقب.

NSSortDescriptor  *sort = [[NSSortDescriptor alloc] initWithKey:@"_strPrice"
                                                 ascending:sortFlag selector:@selector(localizedStandardCompare:)] ;
NSMutableArray *stockHoldingCompanies = [NSMutableArray arrayWithObjects:fortune1stock,fortune2stock,fortune3stock,fortune4stock,fortune5stock,fortune6stock , nil];

NSSortDescriptor *sortOrder = [NSSortDescriptor sortDescriptorWithKey:@"companyName" ascending:NO];

[stockHoldingCompanies sortUsingDescriptors:[NSArray arrayWithObject:sortOrder]];

NSEnumerator *enumerator = [stockHoldingCompanies objectEnumerator];

ForeignStockHolding *stockHoldingCompany;

NSLog(@"Fortune 6 companies sorted by Company Name");

    while (stockHoldingCompany = [enumerator nextObject]) {
        NSLog(@"===============================");
        NSLog(@"CompanyName:%@",stockHoldingCompany.companyName);
        NSLog(@"Purchase Share Price:%.2f",stockHoldingCompany.purchaseSharePrice);
        NSLog(@"Current Share Price: %.2f",stockHoldingCompany.currentSharePrice);
        NSLog(@"Number of Shares: %i",stockHoldingCompany.numberOfShares);
        NSLog(@"Cost in Dollars: %.2f",[stockHoldingCompany costInDollars]);
        NSLog(@"Value in Dollars : %.2f",[stockHoldingCompany valueInDollars]);
    }
    NSLog(@"===============================");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top