此问题在此处已有答案:
Sorting array alphabetically with number(8个答案)
12天前关闭
我尝试对一个Map了其他三个数组的数组进行排序。我的主数组是string+number i e ["Day 1","Day 2","Day 3"...]
其他三个数组也是string的数组。
现在我使用下面的代码。
var mainDayArray = ["Day 1","Day 2","Day 3","Day 4","Day 5","Day 6","Day 7","Day 8","Day 9","Day 10","Day 11","Day 12","Day 13"]
var timeArray = ["06:09 PM", "06:09 PM", "06:08 PM", "06:08 PM", "06:08 PM", "06:07 PM", "06:07 PM", "06:07 PM", "06:07 PM", "06:06 PM", "06:06 PM", "06:06 PM", "06:06 PM"]
var dateArray = ["Oct 1", "Oct 2", "Oct 3", "Oct 4", "Oct 5", "Oct 7", "Oct 4", "Oct 5", "Oct 9", "Nov 2", "Nov 3", "Nov 4", "Nov 01"]
var studentNameArray =["as","ab","vf","sd","fd","gr","ht","jh","kl","mn","sf","ts","at"]
let offsets = mainDayArray.enumerated().sorted { $0.element > $1.element }.map { $0.offset }
let sortedCompletedDayArray = offsets.map { mainDayArray[$0] }
let sortedCompletedDateArray = offsets.map { dateArray[$0] }
let sortedCompletedTimeArray = offsets.map { timeArray[$0] }
let sortedCompletedStudentNamesArray = offsets.map { studentNameArray[$0] }
字符串
但是我在这里得到了错误的数据。我得到的输出如下:
mainDayArray = ["Day 9","Day 8","Day 7","Day 6","Day 5","Day 4","Day 3","Day 2","Day 13","Day 12","Day 11","Day 1"]
型
2条答案
按热度按时间tuwxkamq1#
你的day数组看起来已经排序了,但以防万一你的day数组可能是unsorted,这里是我的解决方案:
字符串
然而,这段代码假设你的
mainDayArray
总是以<string> + " " + <number>
的形式出现。如果你看一下parseNumber(from:)
函数,它会从检测到空格的点开始分割元素,即" "
,然后从所有分割的值中,它假设最后一个是当天的数字。然后,它只是将其转换为整数。从这里开始就很简单了,它对那些使用
$0.element < $1.element
和mainDayArray
的数据进行排序。**警告:**如果您的
mainDayArray
不正确,这将导致崩溃。请随意编辑parseNumber(from:)
方法。这只是我做的一个快速实现。该方法的目标是简单地从mainDayArray
中获取元素并从中检索日期。因此,只要函数实现了这一点,此代码就可以工作。eqfvzcg82#
如果我理解正确的话,您希望在按其值排序(降序)后,根据
mainDate
的顺序对所有数组进行排序。我建议首先构建一个结构体并将所有数据封装在一起,如下所示:
字符串
然后你可以按照你想要的顺序对任何属性进行排序,比如:
关于对数字字符串进行排序的具体问题的答案在这里
型
在这里,我根据学生的
mainDate
按照数字顺序对他们进行了排序。注意,传递localizedStandard
将导致Day 9
按照预期的顺序排列在Day 10
之后。然后,如果你实际上需要分离的数组,你可以从这个源代码中提取它们,非常简单,比如:
型