【问题标题】:Swift -sort array by substringSwift - 按子字符串排序数组
【发布时间】:2019-12-13 16:03:55
【问题描述】:

我有一个字符串数组(它们是转换为字符串的 url),在每个字符串的中间它们都有一个 UUID().uuidString ,其中包含一个计数变量和一个 .jpg。

let arr = [ htps://firebasestorage.googleapis.com/myApp.appspot.com/o/users%Mxd6EUO5l2LK-mKa%2F4606E275-B2C5-4A69-B997-01423ABFE3B7%2FBE26726D-B8E5-47C8-9A18-504D23B99090_3.jpg?alt=media&token=e215e6a1-f5b9-431e-83a3,

htps://firebasestorage.googleapis.com/myAapp.appspot.com/o/users%-Ll_Mxd6EUO5l2LK-mKa%2F4606E275-B2C5-4A69-B997-01423ABFE3B7%2FBE26726D-B8E5-47C8-9A18-504D23B99090_1.jpg?alt=media&token=f350cf36-4c4e-4faf,

htps://firebasestorage.googleapis.com/myAPp.appspot.com/o/users%mKa%2F4606E275-B2C5-4A69-B997-01423ABFE3B7%2FBE26726D-B8E5-47C8-9A18-504D23B99090_2.jpg?alt=media&token=123uyqtr

....]

第一个元素中间有这个:2FBE26726D-B8E5-47C8-9A18-504D23B99090_3.jpg

第二个元素中间有这个:2FBE26726D-B8E5-47C8-9A18-504D23B99090_1.jpg

第三个元素中间有这个:2FBE26726D-B8E5-47C8-9A18-504D23B99090_2.jpg

第四个元素和 on on ..

如何根据 UUID 的子字符串与 _x.jpg 或仅根据 _x.jpg 对该数组中的这些字符串进行排序强> 一个人?

仅供参考,我可以事先访问 UUID

【问题讨论】:

  • 您想按jpg的编号对它们进行排序吗?
  • 是的,因为这是它们的共同点,可用于排序
  • _ 分割你的字符串。这里第一部分是 UDID,第二部分是 x.jpg 。现在您可以进行相应的排序了。
  • @dahiya_boy 感谢您的建议。我要去沙希德的回答。基本上就是你说的
  • 与其将UUID 映射到URLs 和Strings,不如将它们映射为[UUID: URL]。按其键对字典进行排序,然后取其值。出于这些目的,[(UUID, URL)] 也可以正常工作。

标签: ios arrays swift sorting


【解决方案1】:

如果你的起始数组是这样的

let array = ["htps://firebasestorage.googleapis.com/myApp.appspot.com/o/users%Mxd6EUO5l2LK-mKa%2F4606E275-B2C5-4A69-B997-01423ABFE3B7%2FBE26726D-B8E5-47C8-9A18-504D23B99090_3.jpg?alt=media&token=e215e6a1-f5b9-431e-83a3","htps://firebasestorage.googleapis.com/myAapp.appspot.com/o/users%-Ll_Mxd6EUO5l2LK-mKa%2F4606E275-B2C5-4A69-B997-01423ABFE3B7%2FBE26726D-B8E5-47C8-9A18-504D23B99090_1.jpg?alt=media&token=f350cf36-4c4e-4faf","htps://firebasestorage.googleapis.com/myAPp.appspot.com/o/users%mKa%2F4606E275-B2C5-4A69-B997-01423ABFE3B7%2FBE26726D-B8E5-47C8-9A18-504D23B99090_2.jpg?alt=media&token=123uyqtr"]

试试这个。

您可以根据您的jpg 后缀进行拆分,然后根据您的UUID 进行拆分。

let sortedArray = array.sorted { (first, second) -> Bool in

let firstIndex = Int((first.components(separatedBy: ".jpg")[0]).components(separatedBy: "FBE26726D-B8E5-47C8-9A18-504D23B99090_")[1]) ?? -1
let secondIndex = Int((second.components(separatedBy: ".jpg")[0]).components(separatedBy: "FBE26726D-B8E5-47C8-9A18-504D23B99090_")[1]) ?? -1
return firstIndex < secondIndex
}

【讨论】:

  • 给我几分钟我现在就试试,谢谢
  • 不同的设备有不同的UDID,所以像这样用UDID静态分离不好。
  • @SShahid 我没有看到 OP 说它很常见。你能突出显示。如果它是通用的,那么它必须对一个用户而不是对整个用户来说是通用的。
  • @SShahid 我刚在操场上试过,没用。打印出来的完全一样
  • 我已经添加了我使用的起始数组。你在用别的东西吗?
【解决方案2】:

你可以这样对数组进行排序

  • 将字符串(返回)转换为 URL。
  • 获取每个网址的lastPathComponent
  • 从最后一个下划线字符到末尾提取子字符串。
  • 将字符串与compare:numeric 选项或localizedStandardCompare: 进行比较

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2014-01-05
    • 2016-12-24
    • 2018-05-29
    • 2021-02-04
    • 2011-12-19
    • 2013-06-06
    相关资源
    最近更新 更多