【问题标题】:Search and use of Strings in 2D Arrays在二维数组中搜索和使用字符串
【发布时间】:2016-04-05 19:05:18
【问题描述】:

我有一个二维数组,我想根据第一维从第二维获取数据,但我不明白如何在 Swift 2 中设置它,因为不推荐使用旧的 for 循环函数。

根据姓名(Burt)我要显示电话号码和组。

myArray: [[String]] = [["Adam", "123456", "Group1"], ["Burt", "251436", "Group2"], ["Cesar", "918273", "Group3"], ["David", "552277", "Group4"]

For i in 0..myArray.count {
   If myArray[i][0] == "Burt" {
      phoneNoLabel.text = myArray[i][1]
      GroupNoLabel.text = myArray[i][2]
   }
}

这就是我在 Tarun Seera 的帮助下解决它的方法。

let myArray = [["Adam", "123456", "Group1"], ["Burt", "251436", "Group2"], ["Cesar", "918273", "Group3"], ["David", "552277", "Group4"]]

var user: String = "Burt"
var phoneNo: String = ""
var groupNo: String = ""

for i in myArray {
    if i[0] == user {
        phoneNo = i[1]
        groupNo = i[2]
    }
}

【问题讨论】:

  • 您还可以在数组中以实体的形式保留详细信息并使用谓词,对于二维数组解决方案,请参阅我的答案

标签: arrays swift for-loop multidimensional-array


【解决方案1】:

您也可以制作实体(NSObject)数组并使用谓词来实现相同的目的,如果您想要这种形式的二维数组,您可以使用下面的代码

let myArray = [["Adam", "123456", "Group1"], ["Burt", "251436", "Group2"], ["Cesar", "918273", "Group3"], ["David", "552277", "Group4"]]

    for i in myArray {
    if i[0] == "Burt" {
        print("Hurrey I am in.. my name is: \(i[0]) my Id is:\(i[1]) and my gourp is:\(i[2])")
    }
    }

【讨论】:

  • 这似乎解决了我最初的问题,修改后我得到了我想要的。
【解决方案2】:
   for i in 0..<myArray.count {
      if myArray[i][0] == "Burt" {
         phoneNoLabel.text = myArray[i][1]
         GroupNoLabel.text = myArray[i][2]
      }
   }

使用

..

而不仅仅是

..

【讨论】:

    【解决方案3】:

    您的问题是,i 从 0 变为 myArray.count - 即 4 .. 这意味着您的 i 将变为 0、1、2、3、4 = 您有 5 次 i。您的数组只有 4 个“项目”。

    for i in 1...myArray.count{
        if myArray[i-1][0] == "Burt" {
            phoneNoLabel.text = myArray[i-1][1]
            GroupNoLabel.text = myArray[i-1][2]
        }
    }
    

    for i in 0...myArray.count-1{
        if myArray[i][0] == "Burt" {
            phoneNoLabel.text = myArray[i][1]
            GroupNoLabel.text = myArray[i][2]
        }
    }
    

    应该可以解决你的问题。

    【讨论】:

      【解决方案4】:

      作为显式循环的替代方案,您可以使用函数式编程方法

      let searchForUser = "Burt"
      let userInfo = Array(myArray
          .flatMap{ $0.first == searchForUser ? $0.suffixFrom(1) : nil }
          .flatten())
      
      print(userInfo) // ["251436", "Group2"]
      

      对于您的具体示例,您可以从 userInfo 数组中轻松获得您所追求的用户信息

      phoneNoLabel.text = userInfo[0] // 251436
      groupNoLabel.text = userInfo[1] // Group2
      

      请注意,我已将您问题中的示例中的 GroupNoLabel 变量 (UILabel?) 重命名为 groupNoLabel,因为 Swift 中的 变量 按照惯例应该使用 @987654327 @ 名称(而不是 CamelCase,例如用于 types)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-11
        • 1970-01-01
        • 1970-01-01
        • 2017-08-16
        • 2020-07-27
        • 2017-03-26
        • 1970-01-01
        相关资源
        最近更新 更多