1. ホーム
  2. ios

[解決済み] Swiftです。オブジェクトの配列をアルファベット順に並べる

2022-04-25 12:07:18

質問

こんなのあるんだ。

class Movies {
  Name:String
  Date:Int
}

と[Movie]の配列があります。この配列を名前のアルファベット順に並べるにはどうしたらよいでしょうか。私は試しました。

movieArr = movieArr.sorted{ $0 < $1 }

そして

movieArr = sorted(movieArr)

が、Movieのname属性にアクセスしていないため、うまくいきません。

どうすればいいですか?

クロージャの中で sort で並べ替えたいプロパティを比較します。こんな感じ。

movieArr.sorted { $0.name < $1.name }

または、ケースを迂回させたい場合は、以下のようにします。

movieArr.sorted { $0.name.lowercased() < $1.name.lowercased() }

参考までに 通常、大文字で始まるタイプのみです。 namedate ではなく NameDate .


例、遊び場にて。

class Movie {
    let name: String
    var date: Int?

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

var movieA = Movie("A")
var movieB = Movie("B")
var movieC = Movie("C")

let movies = [movieB, movieC, movieA]
let sortedMovies = movies.sorted { $0.name < $1.name }
sortedMovies

sortedMovies は、次の順序になります。 [movieA, movieB, movieC]

Swift5アップデート

channelsArray = channelsArray.sorted { (channel1, channel2) -> Bool in
            let channelName1 = channel1.name
            let channelName2 = channel2.name
            return (channelName1.localizedCaseInsensitiveCompare(channelName2) == .orderedAscending)