質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

4331閲覧

【Swift】Arrayのソートが思い通りにできません

ababab

総合スコア47

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

1グッド

1クリップ

投稿2016/12/10 12:12

編集2016/12/10 13:20

Swift 3.0で、Arrayのソートがうまくできません。
ArrayはString型の二次元配列です。

Arrayの5番目をソートするため

Swift

1str.sort { $1[5] < $0[5] }

と書いているのですが、String型のため一桁目の文字でソートされてしまい

Swift

10:50 21:50 32:5 43:40 54:4 65:30

となってしまいます。
これを数字通り

Swift

10:50 21:50 32:40 43:30 54:5 65:4

とするにはどうしたらよいでしょうか?
よろしくお願い致します。

追加-----------------------

ソートするArray"str2"の中身です

swift

1var str2: Array<Array<String>> = [] 2 3// CSV読み込み 4 if let csvPath = Bundle.main.path(forResource: "test", ofType: "csv") { 5 do { 6 var csvString = try NSString(contentsOfFile: csvPath, encoding: String.Encoding.utf8.rawValue) as String 7 csvString = csvString.replacingOccurrences(of: "\r\n", with: "") 8 let array2:Array = csvString.components(separatedBy: ",") 9 10 var items2 = [String]() 11 array2.enumerated().forEach { (index, value) in 12 13 items2.append(value) 14 15 if (index + 1) % 7 == 0{ 16 17 if exist == true{ 18 19 str2.append(items2) 20 21 items2 = [String]() 22 exist = false 23 24 }else{ 25 items2 = [String]() 26 } 27 } 28 29 } 30 } catch { 31 // エラー 32 } 33 } 34 35 for i in 0...str2.count-1 { 36 37 if str2[i][5] == "有" { 38 39 str.append(str2[i]) 40 41 } 42 } 43 44 str2 = str 45 46 str2.remove(at: 0) 47 str2.sort { $1[6] < $0[6] } 48 49}
退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_Kentarou

2016/12/10 12:48

こちらでも試せる様にデータ等のコードも載せていただけますか?
ababab

2016/12/10 13:03

申し訳ありません。こちらで勘違いをしており、質問文全体を修正しましたのでご回答頂けると嬉しいです。よろしくお願い致します。
_Kentarou

2016/12/10 13:12

strのデータはどのような形ですか? こちらでも実行できるコードの形で載せてもらってもいいですか?
ababab

2016/12/10 13:20

追加を忘れておりました。申し訳ありません。先ほどコードを追加しましたので、ご確認お願い致します。
guest

回答1

0

ベストアンサー

必ず数値が入っている場合

Intに変換して比較します。

swift

1str.sort { Int($1[5])! < Int($0[5])! }

Int以外の文字列が入る可能性がある場合

その文字列を0としてソートします。

swift

1str.sort { Int($1[5]) ?? 0 < Int($0[5]) ?? 0 }

投稿2016/12/10 13:19

編集2016/12/10 13:24
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問