2017-03-12 4 views
0

数字で文字列配列をソートしようとしましたが、正しい順序が得られません。 Swift3で10以上の数字を並べ替え

print(alleTouren) // ["1", "3", "2", "5", "15", "4"] 

alleTouren = alleTouren.sorted(by: {$0 < $1})        

print(alleTouren) // ["1", "15", "2", "3", "4", "5"] 

は私も(で:<) alleTouren.sortを試してみましたalleTouren.sort()が、私はいつもあまりにも早く15を取り戻します。私は何を間違っているのですか?

+0

正しい順序が得られます。文字列は辞書順に正しく並べ替えられています。整数の並べ替えが必要な場合は、最初にそれらを変換する必要があります。 – Alexander

答えて

0

すべての文字列がIntに変換できるので、クロージャへの変換を追加します。

var alleTouren = ["1", "3", "2", "5", "15", "4"] 
alleTouren = alleTouren.sorted(by: { Int($0)! < Int($1)! }) 

また、おそらく、より効率的であるnumericオプションでStringcompare関数を使用します。

alleTouren = alleTouren.sorted(by: { $0.compare($1, options:.numeric) == .orderedAscending}) 
+0

パフォーマンスのために 'alleTouren.flatMap(Int.init).sorted.flatMap(String.init)'と比較してどうか不思議です – Alexander

+0

ありがとうございました! – Squirrel

0

問題は、数値であるかのように並べ替えると言っているようですが、文字列なので「1」、「15」、「2」...が正しいことです。 $ 0と$ 1を整数に変換して比較することができます。私はスウィフトの専門家ではないんだけど、これが動作しているようです

alleTouren = alleTouren.sorted{let s0 = Int($0) 
let s1 = Int($1) 
return s0! < s1!} 
+0

最初の答えはすでに仕事をしていて、もっと簡単に見えるので、答えをありがとう。テストしなかった。 – Squirrel

関連する問題