【问题标题】:How to sort an Array of Tuples?如何对元组数组进行排序?
【发布时间】:2014-08-05 17:39:54
【问题描述】:

如何实现(或创建)元组列表的数组排序?
以下是从我的代码中收集的。

基本上我创建了一个元组数组 并通过 for 循环填充它;之后我尝试对其进行排序。

var myStringArray: (String,Int)[]? = nil
...

myStringArray += (kind,number)
...

myStringArray.sort{$0 > $1}

这是 Xcode 在我构建之前给我的:

test.swift:57:9: '(String, Int)[]?'没有名为的成员 '排序'

【问题讨论】:

    标签: arrays sorting tuples swift


    【解决方案1】:

    你有两个问题。首先,myStringArray 是一个Optional,您必须先“解包”它,然后才能对其调用方法。其次,元组没有>运算符,你必须自己做比较

    if let myStringArray = myStringArray {
        myStringArray.sort { $0.0 == $1.0 ? $0.1 > $1.1 : $0.0 > $1.0 }
    }
    

    【讨论】:

    • 更相关的排序将首先按元组的第一个元素排序,然后在第一个元素相等的情况下按第二个元素排序。 myStringArray!.sort { $0.0 == $1.0 ? $0.1 < $1.1 : $0.0 < $1.0 }
    【解决方案2】:

    其实我要找的是整数值最大的元组:

    var myStringArray: (String,Int)[]? = nil
    ...
    println("myStringArray: \(myStringArray)\n")
    myStringArray!.sort {$0.1 > $1.1}
    println("myStringArray: \(myStringArray)\n")
    ...
    

    原文:

    myStringArray: [(One, 1), (Square, 1), (Square, 4), (Square, 9), (Square, 16), (Square, 25), (Prime, 2), (Prime, 3), (Prime, 5), (Prime, 7), (Prime, 11), (Prime, 13), (Fibonacci, 1), (Fibonacci, 1), (斐波那契, 2), (斐波那契, 3), (斐波那契, 5), (斐波那契, 8)]

    排序:

    myStringArray: [(Square, 25), (Square, 16), (Prime, 13), (Prime, 11), (Square, 9), (Fibonacci, 8), (Prime, 7), (Prime, 5), (Fibonacci, 5), (Square, 4), (Prime, 3), (Fibonacci, 3), (Prime, 2), (Fibonacci, 2), (一, 1), (正方形, 1), (斐波那契, 1), (斐波那契, 1)]

    ...所以它是具有最大整数的“正方形”:25。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多