Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:按字母顺序对对象数组排序_Ios_Arrays_Swift_Sorting - Fatal编程技术网

Ios Swift:按字母顺序对对象数组排序

Ios Swift:按字母顺序对对象数组排序,ios,arrays,swift,sorting,Ios,Arrays,Swift,Sorting,我有这个: class Movies { Name:String Date:Int } 还有一系列的[电影]。如何按名称的字母顺序对数组排序?我试过: movieArr=movieArr.sorted{$0arrMessages2.date! }* 由于未能使用基于区域设置的比较进行排序,这些答案中的大多数都是错误的谢谢,我刚开始学习Swift,我不知道闭包的用法。请使用movies.sort而不是movies.sort@Mike Sthanks进行解释。改进了我的编辑,应该可以,请看

我有这个:

class Movies {
  Name:String
  Date:Int
}
还有一系列的[电影]。如何按名称的字母顺序对数组排序?我试过:

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

movieArr=已排序(movieArr)


但这不起作用,因为我没有访问Movies的name属性。

在传递给
排序的闭包中,比较要排序的属性。像这样:

movieArr.sorted { $0.name < $1.name }
sortedMovies
将按顺序排列
[movieA,movieB,movieC]

Swift5更新


使用Swift 3,您可以选择以下方法之一来解决问题


1.与不符合
可比
协议的
电影
类一起使用 如果
电影
类不符合
可比
协议,则必须在闭包中指定要使用数组的
排序属性(按:​)方法

电影
类别声明:

import Foundation

class Movie: CustomStringConvertible {

    let name: String
    var date: Date
    var description: String { return name }

    init(name: String, date: Date = Date()) {
        self.name = name
        self.date = date
    }

}
import Foundation

class Movie: CustomStringConvertible, Comparable {

    let name: String
    var date: Date
    var description: String { return name }

    init(name: String, date: Date = Date()) {
        self.name = name
        self.date = date
    }

    static func ==(lhs: Movie, rhs: Movie) -> Bool {
        return lhs.name == rhs.name
    }

    static func <(lhs: Movie, rhs: Movie) -> Bool {
        return lhs.name < rhs.name
    }

}
import Foundation

class Movie: CustomStringConvertible, Comparable {

    let name: String
    var date: Date
    var description: String { return name }

    init(name: String, date: Date = Date()) {
        self.name = name
        self.date = date
    }

    static func ==(lhs: Movie, rhs: Movie) -> Bool {
        return lhs.name == rhs.name
    }

    static func <(lhs: Movie, rhs: Movie) -> Bool {
        return lhs.name < rhs.name
    }

}
用法:

let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")

let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0.name < $1.name })
// let sortedMovies = movies.sorted { $0.name < $1.name } // also works

print(sortedMovies)

/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")

let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0 < $1 })
// let sortedMovies = movies.sorted { $0 < $1 } // also works
// let sortedMovies = movies.sorted(by: <) // also works

print(sortedMovies)

/*
 prints: [Avatar, Piranha II: The Spawning, Titanic]
 */
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")

let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted()

print(sortedMovies)

/*
 prints: [Avatar, Piranha II: The Spawning, Titanic]
 */
用法:

let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")

let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0.name < $1.name })
// let sortedMovies = movies.sorted { $0.name < $1.name } // also works

print(sortedMovies)

/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")

let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0 < $1 })
// let sortedMovies = movies.sorted { $0 < $1 } // also works
// let sortedMovies = movies.sorted(by: <) // also works

print(sortedMovies)

/*
 prints: [Avatar, Piranha II: The Spawning, Titanic]
 */
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")

let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted()

print(sortedMovies)

/*
 prints: [Avatar, Piranha II: The Spawning, Titanic]
 */
用法:

let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")

let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0.name < $1.name })
// let sortedMovies = movies.sorted { $0.name < $1.name } // also works

print(sortedMovies)

/*
prints: [Avatar, Piranha II: The Spawning, Titanic]
*/
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")

let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted(by: { $0 < $1 })
// let sortedMovies = movies.sorted { $0 < $1 } // also works
// let sortedMovies = movies.sorted(by: <) // also works

print(sortedMovies)

/*
 prints: [Avatar, Piranha II: The Spawning, Titanic]
 */
let avatarMovie = Movie(name: "Avatar")
let titanicMovie = Movie(name: "Titanic")
let piranhaMovie = Movie(name: "Piranha II: The Spawning")

let movies = [avatarMovie, titanicMovie, piranhaMovie]
let sortedMovies = movies.sorted()

print(sortedMovies)

/*
 prints: [Avatar, Piranha II: The Spawning, Titanic]
 */

对于使用Swift 3的用户,可接受答案的等效方法为:

movieArr.sorted { $0.Name < $1.Name }
movieArr.sorted{$0.Name<$1.Name}
让sortArray=array.sorted(按:{$0.name.lowercased()<$1.name.lowercased()})
排序数组 Swift 4.2

arrayOfRaces = arrayOfItems.sorted(by: { ($0["raceName"] as! String) < ($1["raceName"] as! String) })
arrayOfRaces=arrayOfItems.sorted(按:{($0[“raceName”]as!String)<($1[“raceName”]as!String)})
<代码>代码>导入基础
导入CoreData
扩展消息{
@nonobjc公共类func fetchRequest()->NSFetchRequest{
返回NSFetchRequest(entityName:“消息”)
}
@NSManaged公共变量文本:字符串?
@NSV管理的公共var日期:日期?
@NSVAR管理的公共var朋友:朋友?
}
//这里是数组,您可以按照下面的方式对数组进行排序
var arrMessages=[Messages]()
arrMessages.sort{(arrMessages1,arrMessages2)->Bool-in
arrMessages1.date!>arrMessages2.date!
}*

由于未能使用基于区域设置的比较进行排序,这些答案中的大多数都是错误的

谢谢,我刚开始学习Swift,我不知道闭包的用法。请使用movies.sort而不是movies.sort@Mike Sthanks进行解释。改进了我的编辑,应该可以,请看一看:)注意,对可能大写或不大写的字符串进行排序时,这不起作用。比较
。小写的
可以解决这个问题。@EricAya注意到在Swift 3中它是
排序的
:D。嘿,第二部和第三部之间有什么区别吗(电影除外)。排序(按:
排序(按:)
排序()
是两种不同的方法。你可以使用
数组。排序()
作为
array.sorted的替代方法(by:是的,只是在类定义的情况下询问我们是否需要更改什么?我的意思是,
sorted(by:)
sorted()可以有相同的类定义吗)
?是的,您可以使用与类/结构相同的实现,在任何情况下,都必须符合
可比的
协议。我使用customObject的数组按升序排列时,它没有以正确的方式缩短。
“1”“14”“28”“31”“4”“42”“49”
添加.lowercased()经过长时间的尝试,我终于找到了工作。我不明白为什么,因为所有文本都是小写的。when use lowercased()将所有名称改为小写,以便正确排序:)