热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何用Swift排序数组-HowtosortanarrayinSwift

IwanttheSwiftversionofthiscode:我想要这个代码的Swift版本:NSArray*sortedNames[namessortedArrayUs

I want the Swift version of this code:

我想要这个代码的Swift版本:

NSArray *sortedNames = [names sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

8 个解决方案

#1


67  

var names = [ "Alpha", "alpha", "bravo"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }

Update: Providing explanation as per recommendation of a fellow SO user.

更新:根据SO用户的推荐提供解释。

Unlike ObjC, in Swift you have sorted() (and sort()) method that takes a closure that you supply that returns a Boolean value to indicate whether one element should be before (true) or after (false) another element. The $0 and $1 are the elements to compare. I used the localizedCaseInsensitiveCompare to get the result you are looking for. Now, localizedCaseInsensitiveCompare returns the type of ordering, so I needed to modify it to return the appropriate bool value.

与ObjC不同的是,在Swift中,您有sort()(和sort())方法,它接受您提供的闭包,返回一个布尔值,以指示一个元素应该在(true)之前还是在(false)之后。$0和$1是要比较的元素。我使用了本地化的caseinsensitivecompare来得到你想要的结果。现在,本地化后的caseinsensitivecompare返回排序类型,因此我需要修改它以返回适当的bool值。

Update for Swift 2: sorted and sort were replaced by sort and sortInPlace

Swift 2的更新:排序和排序被排序和排序所取代

#2


20  

Sorting an Array in Swift

Define a initial names array:

定义一个初始名称数组:

var names = [ "gamma", "Alpha", "alpha", "bravo"]

Method 1:

方法1:

var sortedNames = sorted(names, {$0 <$1})
// sortedNames becomes "[Alpha, alpha, bravo, gamma]"

This can be further simplified to:

这可进一步简化为:

var sortedNames = sorted(names, <)
// ["Alpha", "alpha", "bravo", "gamma"]
var reverseSorted = sorted(names, >)
// ["gamma", "bravo", "alpha", "Alpha"]

Method 2:

方法2:

names.sort(){$0 <$1}
// names become sorted as this --> "[Alpha, alpha, bravo, gamma]"

#3


17  

If your array does not contain Custom Objects (just a string or number type):

如果您的数组不包含自定义对象(只是一个字符串或数字类型):

var sortedNames = sorted(names, <)

Otherwise if you create a Custom Data Object Class containing custom properties inside:

否则,如果您创建一个自定义数据对象类,其中包含自定义属性:

customDataObjectArray.sort({ $0.customProperty <$1.customProperty })

#4


7  

Most efficient way of sorting in SWIFT

The use of Operator Overloading is the most efficient way to sort Strings in Swift language.

使用运算符重载是在Swift语言中排序字符串的最有效方法。

// OPERATOR OVERLOADING
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var sortedNames = sorted(names, <)
var reverseOrder = sorted(names, >)

In above code > and < operators are overloaded in Swift to sort Strings.

在上面的代码中,>和 <运算符在swift中被重载以对字符串进行排序。

I have test the code in Playground and conclude that when we use operator overloading it is best for sorting Strings.

我在操场上测试了代码,并得出结论,当我们使用操作符重载时,它最适合对字符串进行排序。

Copy below to Playground.

复制下面的游乐场。

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]

var reversed = sorted (names,
    // This is a closure
    { (s1 : String, s2 : String) -> Bool in
        return s1 > s2
    }
)
println(reversed)

var reverseOrder = sorted(names, {s1, s2 in s1 > s2})

var reverseOrder2 = sorted(names, { $0 > $1} )

// OPERATOR OVERLOADING
var reverseOrder3 = sorted(names, >)

The conclusion from Playground:

结论从操场上:

enter image description here

From above image you can see that all other ways needs to enumerate loops for sorting 5 strings. Where as when we use Operator overloading it does not required to enumerate loop to sort strings.

从上面的图像中可以看到,所有其他的方法都需要枚举循环来排序5个字符串。当我们使用操作符重载时,不需要枚举循环来排序字符串。

Referenced from Swift documentation

从迅速引用文档

#5


4  

If you want to sort your array in ascending order then use below syntax:

如果要按升序排列数组,请使用以下语法:

var arrayName = sorted(arrayName, <)

as the sorted() is the predefined function in swift and < with > as I have shown below:

作为排序的()是swift和 <的预定义函数,用于指示数组应该按升序排序。如果您想按降序排列数组,那么只需将<和> 替换为如下所示:

var arrayName = sorted(arrayName, >)

#6


2  

You can usually use the built-in

您通常可以使用内置的

func sort(inout array: [T])

but if you want to use localizedCaseInsensitiveCompare:, your code can be translated directly using NSArray.

但是如果您想使用本地化的caseinsensitivecompare:,您的代码可以直接使用NSArray进行翻译。

#7


2  

Any method that can be used with Objective-C sortedArrayUsingSelector: can be used with Swift sort (or sorted) provided the type of thing in the array is known. So, in your code:

任何可以与Objective-C sortedArrayUsingSelector一起使用的方法都可以与Swift排序(或排序)一起使用,前提是数组中的内容的类型是已知的。所以,在你的代码:

var arr : [String] = // ...
// it is an array of String, so we can use localizedCaseInsensitiveCompare:
sort(&arr) {return $0.localizedCaseInsensitiveCompare($1) == .OrderedAscending}

Similarly:

类似的:

var events : [EKEvent] = // ...
sort(&events) {return $0.compareStartDateWithEvent($1) == .OrderedAscending}

#8


1  

In Swift-

在斯威夫特-

let students: Set = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
let sortedStudents = students.sorted()
print(sortedStudents)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"

To sort the elements of your sequence in descending order, pass the greater-than operator (>) to the sorted(isOrderedBefore:) method.

要按降序对序列中的元素进行排序,请将大于运算符(>)传递给sort (isOrderedBefore:)方法。

let descendingStudents = students.sorted(isOrderedBefore: >)
print(descendingStudents)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"

推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 似乎有两种不同的方法可以将字符串转换为字节,如对typeerror的回答所示:str不支持缓冲区接口。这些方法中哪一种比较好或更适合用Python& ... [详细]
  • des算法php,Des算法属于加密技术中的
    本文目录一览:1、des是什么算法2、80分求 ... [详细]
author-avatar
梦露的殇_192
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有