私はSwiftを初めて使用しています。配列のアルファベット順の並べ替えを実装する必要がある1つのサンプルアプリを試しています.jsonデータを取得し、配列にタイトルを追加しています。今、アルファベット順に並べ替えたいここに私のコードがあります.....
func updateSearchResults(data: NSData?)
{
do
{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
if let blogs: NSArray = json["results"] as? [AnyObject] {
print(blogs)
for blog in blogs {
if let name = blog["original_title"] as? String {
names.addObject(name)
}
}
print(names)
**let sortedArray = sorted(names, {
(str1: String, str2: String) -> Bool in
return str1.toInt() < str2.toInt()** // Here I am getting the Error Message
})
}
}
catch {
print("error serializing JSON: \(error)")
}
}
私が得ているエラーメッセージは"タイプ '(NSMutableArray、(String、String)-> Bool)'"の引数リストで 'sorted'を呼び出すことはできません
これを達成するために多くのことを試みましたが、解決策が見つかりませんでした。誰でもこの問題を解決するのを手伝ってもらえますか。前もって感謝します。
まず、次のコード行を使用して、NSMutableArray
を配列に変換します。
let swiftArray = mutableArray as AnyObject as! [String]
以下のコード行を使用して、配列をソートします。
var sortedArray = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
sort
Closuresについては、以下のリンクを確認してください。 https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
Swift 3.0の更新
var sortedArray = swiftArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
この単純な行コードを使用して、ur配列をソートします
let sortedNames = names.sort { $0.name < $1.name }
Swift 4の場合、これのみ使用できます
let sortedNames = names.sorted(by: <)
Swift4
var names = [ "Alpha", "alpha", "bravo", "beta"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha","beta", "bravo"]
Swift 4(作業コード)
JSONレスポンス-> aryNameListに保存
"DATA": [
{
email = "[email protected]";
firstname = Harvey
},
{
email = "[email protected]";
firstname = poonam
},
{
email = "[email protected]";
firstname = rahul
},
{
email = "[email protected]";
firstname = Chulbulx
},
{
email = "[email protected]";
firstname = rahul
},
{
email = "[email protected]";
firstname = Jay
},
{
email = "[email protected]";
firstname = Roy
},
{
email = "[email protected]";
firstname = Regan
},
{
email = "[email protected]";
firstname = Jaydip
}
]
コード
self.aryNameList = self.aryNameList.sorted(by: { (Obj1, Obj2) -> Bool in
let Obj1_Name = Obj1.firstname ?? ""
let Obj2_Name = Obj2.firstname ?? ""
return (Obj1_Name.localizedCaseInsensitiveCompare(Obj2_Name) == .orderedAscending)
})
すべてのケースで動作(例:lowerCase、upperCase ..)
オブジェクトの配列の場合:
items = items.sorted(by: { (item1, item2) -> Bool in
return item1.product.name.compare(item2.product.name) == ComparisonResult.orderedAscending
})
Swift 3ソリューション:
let yourStringArray = [ "beTA", "ALPha", "Beta", "Alpha"]
var sortedArray = yourStringArray.sorted()
// Result will be ["ALPha", "Alpha", "Beta", "beTA"]
ジャティへの信条
これを試して
var names = [ "Alpha", "alpha", "bravo"]
var sortedNames = names.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha", "bravo"]