Arrays 在swift 3中对元组数组进行排序

Arrays 在swift 3中对元组数组进行排序,arrays,swift,sorting,swift3,tuples,Arrays,Swift,Sorting,Swift3,Tuples,嗨,我有下面的 class MyClass { var myString: String? } var myClassList = [String: MyClass]() 我想按照Swift 3中myString变量的字母顺序对这个数组进行排序任何指针?好问题!尽管我想首先指出,[String:MyClass]是一个字典,而不是元组 然而,Swift确实支持元组。元组的语法如下所示: var tupule: (String, MyClass) = (foo, bar) 然后,您需要创建

嗨,我有下面的

class MyClass {
  var myString: String?
}

var myClassList = [String: MyClass]()

我想按照Swift 3中myString变量的字母顺序对这个数组进行排序任何指针?

好问题!尽管我想首先指出,
[String:MyClass]
是一个字典,而不是元组

然而,Swift确实支持元组。元组的语法如下所示:

var tupule: (String, MyClass) = (foo, bar)
然后,您需要创建一个数组:

var tupules:[(String, MyClass)] = [(foo, bar), (up, dog)]
然后可以对该数组进行排序:

tupules.sort({ $0[1].myString > $1[1].myString })
尽管您可能应该定义一个更健壮的排序机制

以下是排序闭包的内容:

$0是需要比较的对象之一,$1是另一个对象。 $0[1]$1[1]访问对象的1索引,在这种情况下,根据元组中的定义,它是自定义对象MyClass


希望这有帮助。

如上所述,你有字典,而不是元组。 然而,字典确实有一个排序(按:)方法,可以用来对键/值对元组数组进行排序。下面是一个例子:

var m: [String: Int] = ["a": 1]
let n = m.sorted(by: { (first: (key: String, value: Int), second: (key: String, value: Int)) -> Bool in
  return first.value > second.value
})
这是为了显示关闭的完整签名而扩展的,但是很容易缺少:

let n = m.sorted(by: {
  return $0.value > $1.value
})
此外,还可以对字典执行其他枚举

m.forEach { (element: (key: String, value: Int)) in
  print($0.value)
}
所有这些都归功于Swift中的收集和序列协议层次结构,它们是一些非常好的抽象。

Swift 5.2.4版

让arr=[(0,5),(1,2),(2,4),(3,1),(4,3)]/->[(3,1),(1,2),(4,3),(2,4),(0,5)]
设sorted=arr.sorted{$0.1<$1.1}

myClassList
是字典而不是数组。我建议您在继续排序之前先更正数据结构。
myClassList.sorted{($0.value.myString??)<($1.value.myString??)}
您可以对字典进行排序,如果删除括号,它将返回元组数组(键、值)。您还可以省略
return
关键字。顺便说一句,他说他想按myString属性排序。在本例中,我想按字母顺序排列字符串。@LeoDabus Check xcode,字典只有
排序(按:)
,这意味着当用括号括起来时,不能省略
,但是如果使用尾随闭包语法,则可以(尽管从风格上来说,排序/映射/筛选等功能并不可取)