swift - String.init 期间发生了什么
问题描述
我发现这个示例函数接受一个整数,然后将数字从大到小排序。示例输入:12345 输出:54321。该解决方案有效,但我试图理解 String.init 部分。谁能解释发生了什么?
func descendingOrder(of number: Int) -> Int {
let s = String(number).sorted().reversed()
return Int(s.compactMap(String.init).joined())!
}
解决方案
s
是类型ReversedCollection<[String.Element]>
,所以它使从String.Element
到的转换是内部循环的String
含义String.init
compactMap
当您看到时,DataType.init
您需要知道被循环的项目是该类型的 init 的参数,因此在 String 的字符上发生循环以生成一个新的 [String] 作为结果
开发人员把这条线复杂化了,为了更容易理解,可以简化为这个
func descendingOrder(of number: Int) -> Int {
let s = String(number).sorted().reversed() // sort and reverse the string descendinng
let arr = s.compactMap(String.init) // convert characters to array of strings
let joined = arr.joined() // join them in 1 string
let res = Int(joined)! // convert string to int
return res
}
或者在评论中
func descendingOrder(of number: Int) -> Int {
let s = String(number).sorted().reversed() // sort and reverse the string descendinng
let arr = s.map{ String($0) } // convert characters to array of strings
let joined = arr.joined() // join them in 1 string
let res = Int(joined)! // convert string to int
return res
}
推荐阅读
- python - AttributeError: 'DataFrame' 对象没有属性 'cat' 和一系列异常
- sql - 为 Apex 中的 Form 变量赋予动态值
- html - 为什么我的 html 幻灯片中只显示了一张图片?
- python - Pandas 根据另一个数据框将多个列和行值设置为 nan
- excel - 在表单上从 Excel 工作表的单元格创建多个标签
- javascript - 了解javascript语句的使用
- flutter - 如何在flutter web-view app中保存登录信息,这样就不需要每次都登录了
- google-compute-engine - 无法连接 Google Compute Engine
- c++ - 在 QTreeWidget 中排序时调试断言(无效的比较器)
- python - Python 代码不会更改我的跟踪数据库