如何从元组数组创建编号列表?

How to create numbered list from tuples array?

我有以下列表:

   let myList: [(String, Int, Double)] = [("A", 1, 1.5), ("B", 2, 2.5), ("C", 3, 3.5)]

我正在尝试生成以下输出

1) A | 1
2) B | 2
3) C | 3

如果我删除第二个元素,我希望输出也被更新,就像这样

1) A | 1
2) C | 3

我是 Swift 的新手,所以这让我头疼了很多,但我该如何开始这样的事情呢?这是我的职能,但我不确定这是否是正确的开始方式。我想知道如何获得额外的符号并保持数字有序。 (这个值将被传递给 UILabel,所以我必须将所有元素放在一个变量中 result

func displayString(myList: [(title: String, id: Int, value: Double)]) -> String {

   var result = ""

   for i in 0..<myList.count {
     
    
    
   }

 

   return result 
 } 

如果您在每一行都需要 1)2),请查看使用 enumerated 循环遍历数组,您可以在其中访问索引和项目

看起来像这样:

func displayString(myList: [(title: String,
                                   id: Int,
                                   value: Double)]) -> String
{
    var result = ""
    
    // The first iteration, index is 0 and item is ("A", 1, 1.5)
    // Second time, index is 1 and item is ("B", 2, 2.5) etc
    for (index, item) in myList.enumerated()
    {
        // Since index starts from 0, you add +1 to start from 1 in the output
        result += "\(index+1)) \(item.title) | \(item.id)\n"
    }
    
    return result
}

输出将是:

1) A | 1
2) B | 2
3) C | 3

但是,我强烈建议您探索高阶函数,例如 filter, map, reduce 等,这将缩短您为执行这些操作而编写的代码。

例如,您可以通过以下方式获得类似的结果:

func displayStringSwifty(myList: [(title: String,
                                   id: Int,
                                   value: Double)]) -> String
{
    return myList.reduce("") { val, item in val + "\(item.0) | \(item.1)\n" }
}

输出将是

A | 1
B | 2
C | 3

更新

Leo Dabus 在评论中提供的更简洁的版本:

myList.map { "\([=14=].title) | \([=14=].id)" }.joined(separator: "\n")
let myList: [(String, Int, Double)] = [
             ("A", 1, 1.5),
             ("B", 2, 2.5),
             ("C", 3, 3.5)]

myList.enumerated().forEach { (index, element) in
    print( "\(index+1)) \(element.0) | \(element.1)" )
}

给你

1) A | 1
2) B | 2
3) C | 3