2017-09-24 7 views
0

私はオブジェクトの配列を持っており、注文したいと思います。ザッツは通常ない大きな問題が、私は次のように文字列値を注文したい私の特別な場合:今CAT-10である場合プロパティ別の注文オーダー

CAT-1、CAT-2、... CAT-10

CAT-2の前に。

私はすでに私はこのケースでは、文字列値を並べ替えることが分かっ:

let items = items.sorted { 
    (s1, s2) -> Bool in return s1.localizedStandardCompare(s2) == .orderedAscending 
} 

しかし、配列が文字列値のみが含まれている場合、これが唯一の働いています。私の場合、私はこのようなもので、それをソートしたいと思います:

self.filteredItems.sort{ 
    return $0.position < $1.position 
} 

しかし、私はその特殊なソート順を解決するために、上記の機能を組み合わせることができます方法がわからないのですか?

+0

は、あなたの質問に具体的な例を追加することはできますか?私はあなたが何をしているかを完全には分かっていないので、それはいくらか明確さを加えるでしょう。 –

答えて

1

確認してください:

class Category { 
    let name: String 

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

var catA = Category("CAT-2") 
var catB = Category("CAT-10") 
var catC = Category("CAT-1") 

let items: [Category] = [catA, catB, catC] 
let filteredItems: [Category] = items.sorted { (s1, s2) -> Bool in 
    return s1.name.localizedStandardCompare(s2.name) == .orderedAscending 
} 
print(filteredItems[0].name, filteredItems[1].name, filteredItems[2].name) 
// Output : CAT-1 CAT-2 CAT-10 

let sortedBy = items.sorted { (c1, c2) -> Bool in 
    return c1.name < c2.name 
} 
print(sortedBy[0].name, sortedBy[1].name, sortedBy[2].name) 
// Output : CAT-1 CAT-10 CAT-2 
+0

ありがとう、素晴らしい作品! – derdida

関連する問題