【问题标题】:Swift. Sort array of struct迅速。结构体的排序数组
【发布时间】:2015-10-07 13:30:53
【问题描述】:

我需要订购struct 的数组。

我试过了:

let aRes =  self.aSoundTracks_Filtered.sort{ $0.st < $1.st }

提供错误:无法使用类型为“((_, _) -> _)”的参数列表调用“排序”

也试试这个:

let hasPrefixAndSuffixw =  self.aSoundTracks_Filtered.sort( $0.st < $1.st )

提供错误:匿名闭包参数不包含在闭包中

有什么想法吗? :)

我的 aSoundTracks_Filtered 是这样声明的:

   var aSoundTracks_Filtered = [SoundTrack]()

我的结构是这样的:

struct SoundTrack {
    let sID : Int
    let st : String
}

【问题讨论】:

  • 我假设aSoundTracks_Filtered 是您的阵列?它包含什么类型,你能提供它的代码吗?
  • 貌似是类型推断问题,试试{(a, b) -&gt; Bool in a.st &lt; b.st}
  • 我已在问题中添加了信息。希望对您有所帮助
  • oisdk: let hasPrefixAndSuffix = self.aSoundTracks_Filtered.sort {(a, b) -> Bool in a.st _)' 类型的参数列表
  • Was i Type,现在可以使用。谢谢:)

标签: arrays xcode swift sorting


【解决方案1】:

当您以下列方式在 Playground 中进行测试时,您的代码可以正常工作:

struct SoundTrack {
   let sID : Int
   let st : String
}

var aSoundTracks_Filtered = [SoundTrack]()

aSoundTracks_Filtered.append(SoundTrack(sID: 1, st: "a"))
aSoundTracks_Filtered.append(SoundTrack(sID: 2, st: "b"))

aSoundTracks_Filtered.sort{ $0.st > $1.st } // [{sID 2, st "b"}, {sID 1, st "a"}]

但是sort() 就地对数组进行排序。你可能要使用的是sorted(),它不会修改原始数组,而是返回一个新的排序数组:

let aRes = aSoundTracks_Filtered.sorted{ $0.st > $1.st }

上面的代码是针对 Swift 1.2 的,对于 Swift 2.0,返回一个排序的数组再次被称为“排序”,但它现在是一个(协议扩展)方法而不是一个全局函数。希望对您有所帮助。

【讨论】:

  • 您的 2 条建议返回无法使用类型为 '((_, _) -> _)' 的参数列表调用 'sort' :(
  • 我使用 Xcode 6.4 和 Swift 1.2 进行了测试,效果很好。
  • 谢谢!...对我也有用,只需稍作修改
【解决方案2】:

所以,其实很简单。但是我想知道当您访问数组时self来自哪里。我不知道它属于哪个类,以防它属于结构本身(我不知道为什么,但以防万一)你必须将函数标记为变异,因为你正在改变结构的属性。第二件事实际上是你必须使用大括号:

self.aSoundTracks_Filtered.sort({$0.st < $1.st})

【讨论】:

  • aSoundTracks_Filtered 是一个数组而不是一个函数,请参阅声明,括号的使用是可选的,您可以在没有它的情况下调用sort,请参阅我的答案
  • 我当然知道-您正在做的是使用尾随闭包,所以实际上是的,您可以消除括号。但是,正如我之前在您的回答中看到的那样,将值转换为隐式展开的 Optional 肯定是不合适的
  • 正如您在我的上一个回答中看到的那样,显式转换不是可选的,您可以在我的回答中阅读更多信息stackoverflow.com/questions/30040996/…
  • 您的其他答案暗示您必须解开可选项,因为下标字典返回一个可选项 - 完全不同的主题
猜你喜欢
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 2019-09-28
  • 2021-10-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
相关资源
最近更新 更多