对 URL 数组进行排序

Sorting an array of URLs

我有一个数组,其中存储了类星体 URLs

http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0269/spec-0269-51581-0467.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0329/spec-0329-52056-0059.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/104/spectra/2957/spec-2957-54807-0164.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0342/spec-0342-51691-0089.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2881/spec-2881-54502-0508.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0302/spec-0302-51616-0435.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2947/spec-2947-54533-0371.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0301/spec-0301-51942-0460.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/104/spectra/2962/spec-2962-54774-0461.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2974/spec-2974-54592-0185.fits

我想根据 spec- 旁边的数字而不是按字母顺序对 URL 数组进行排序。我用 sort 对数组进行了排序,但它没有帮助,因为它总是将 3rd 行和 2nd last 行排到顶部,因为它们有一个 1

我想要这样的输出

http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0269/spec-0269-51581-0467.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0301/spec-0301-51942-0460.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0302/spec-0302-51616-0435.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0329/spec-0329-52056-0059.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0342/spec-0342-51691-0089.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2881/spec-2881-54502-0508.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2947/spec-2947-54533-0371.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/104/spectra/2957/spec-2957-54807-0164.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/104/spectra/2962/spec-2962-54774-0461.fits
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/2974/spec-2974-54592-0185.fits

如果你会一直有这种模式,你可以试试:

fileName = strsplit(myUrl, '/')(end)
number = strsplit(fileName(5:end), '.')(0)

将带您了解这个原因,因为理解就是一切...

我们从

开始
http://dr12.sdss3.org/sas/dr12/sdss/spectro/redux/26/spectra/0269/spec-0269-51581-0467.fits

首先我们将 URL 拆分为 / 个字符。这将 return 一个从该字符拆分出来的字符串向量。由于要排序的数字位于最后一个 / 之后,我们可以通过 end 来获取最后一个。现在我们有

spec-0269-51581-0467.fits

接下来,让我们从号码中删除讨厌的 spec-。这一步 并不是 实际上必需的,因为它在所有 URL 中都是不变的,但我们只是为了好玩。我们可以使用Matlab的子串来抓取-之后的字符,使用fileName(5:end)。这将创建一个从第 5 个字符(在本例中为 0)开始并一直到结尾的字符串。太好了,现在我们有

0269-51581-0467.fits

看起来不错!同样,这部分也不是完全必要的,但为了以防万一,无论出于何种原因,我都包含了它。我们可以再次使用 strsplit 函数,但这次在 . 上拆分,并通过传递 0 来获取第一个元素。现在,我们有

0269-51581-0467

继续对那个小家伙进行分类,你就可以开始了!