2016-06-18 6 views
0

Der Python-Server API wird die Anfrage Signatur zu überprüfen, und der Mechanismus ist alle Werte zu bekommen, und sortieren, dann einen geheimen und MD5-Hash anhängen. Aber ich kann die Funktion sort() in obj-C nicht simulieren. Es gibt den Python make_sign Code:Suche nach einer Methode sortiere NSArray auf obj-C was äquivalent python sort (timsort)

def make_sign(api_secret, params=[]): 
""" 
    >>> make_sign("mysecret",[1,'2','string']) 
    'AACF0E5427EECA3490C5642C9916785' 
""" 
_params = [p for p in params if p is not None] 
_params.sort() 
_params.insert(0, api_secret) 
strs = ''.join(_params) 
mds = md5(strs.encode('utf-8')).hexdigest() 
return mds.upper() 

Antwort

1

Sie können eine Instanz von NSArray mit den -sortedArray… methods sortieren. Dies beginnt bei der einfachen Sortierung eines Schlüssels (für das Objekt selbst self) bis zum Sortieren von Funktionen und Schließungen. Wählen Sie einfach eine Methode!

Sortieren ist jedoch nicht so eindeutig. I. e. Im Deutschen gibt es verschiedene Möglichkeiten, "A" und "Ä" oder "s", "ss" und "ß" zu sortieren. Um eine identische Sortierreihenfolge zu haben, müssen Sie vielleicht -sortedArrayUsingComparator: verwenden und Ihren eigenen Vergleich schreiben.

+0

Ich weiß über 'sortedArray', aber weiß nicht, wie man das NSArray vergleicht, enthält beides Abbildung und Zeichen und Zeichenkette. –

+0

Sie können nach einem Typ mit '-isKindOfClass:' suchen. Sind alle Daten vom Typ 'NSString'? In einem solchen Fall müssen Sie jedoch wie im zweiten Absatz beschrieben vorgehen, da es keine natürliche Reihenfolge gibt. Vielleicht ist dies ein Ausgangspunkt: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/index.html#//apple_ref/occ/instm/NSString/compare:options : –