2012-11-12 11 views
6
जिसमें

संभव डुप्लिकेट:
Sorting NSString values as if NSInteger using NSSortDescriptorछंटाई स्ट्रिंग्स के साथ किसी सरणी नंबर

मैं .. किसी सरणी है कि मैं अपने NSMutableDictionary से भरना है और मैं इस का उपयोग करें:

myArray =[[myDict allKeys]sortedArrayUsingSelector:@selector(IDONTKNOW:)]; 

myDicts के AllKeys NSStrings हैं ... 123.423 या 423.343 की तरह ... मुझे नए myArray को सॉर्ट करने की आवश्यकता है cremental संख्या .. 12.234 45.3343 522.533 5432.66 आदि आदि

यह ठीक से करने के लिए @ चयनकर्ता में क्या डालना चाहिए? धन्यवाद

+0

जवाब यहाँ http://stackoverflow.com/a/38347576/5165668 – OlDor

उत्तर

19

आप एक NSSortDescriptor का उपयोग करें और doubleValue कुंजी के रूप में पारित कर सकते हैं।

//sfloats would be your [myDict allKeys] 
NSArray *sfloats = @[ @"192.5235", @"235.4362", @"3.235", @"500.235", @"219.72" ]; 
NSArray *myArray = [sfloats sortedArrayUsingDescriptors: 
        @[[NSSortDescriptor sortDescriptorWithKey:@"doubleValue" 
                ascending:YES]]]; 

NSLog(@"Sorted: %@", myArray); 
5

आप sortedArrayUsingSelector: का उपयोग नहीं कर सकते हैं। sortedArrayUsingComparator: का उपयोग करें और तुलनात्मक ब्लॉक को स्वयं लागू करें।

किंडा की तरह इस क्ष/एक:

Changing the sort order of -[NSArray sortedArrayUsingComparator:]

(वास्तव में, प्रश्न के कोड की संभावना कॉपी/अपने कोड में चिपकाया जा सकता है और यह "बस काम" हूँ एक बार आप इसे integerValue से बदल कि चार परिवर्तित-स्ट्रिंग करने वाली संख्या कॉल के लिए doubleValue के लिए):

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) { 
    double n1 = [obj1 doubleValue]; 
    double n2 = [obj2 doubleValue]; 
    if (n1 > n2) { 
     return (NSComparisonResult)NSOrderedDescending; 
    } 

    if (n1 < n2) { 
     return (NSComparisonResult)NSOrderedAscending; 
    } 

    return (NSComparisonResult)NSOrderedSame; 
}]; 
+0

महान जवाब पर एक नजर है! मेरा दिन बचाओ – DzungPV

0

sortedArrayUsingFunction: पर विचार करें। यह आपको तत्वों की तुलना करते समय नियोजित करने के लिए कस्टम तुलना फ़ंक्शन को परिभाषित करने की अनुमति देता है।

myArray =[[myDict allKeys]sortedArrayUsingFunction:SortAsNumbers context:self]; 

NSInteger SortAsNumbers(id id1, id id2, void *context) 
{ 
    float v1 = [id1 floatValue]; 
    float v2 = [id2 floatValue]; 
    if (v1 < v2) { 
     return NSOrderedAscending; 
    } else if (v1 > v2) { 
     return NSOrderedDescending; 
    } 
    return NSOrderedSame; 
} 

अधिक जानकारी यहाँ उपलब्ध: Sort NSArray using sortedArrayUsingFunction

संबंधित मुद्दे