【问题标题】:How to change data in array of Structure?如何更改结构数组中的数据?
【发布时间】:2021-08-28 01:11:14
【问题描述】:

我的代码如下,

struct RegistrationInformation {
    let leftTitle: String
    let rightTitle: String

}

struct RegisterData{
    let vValueL : String
}
var regDatas : [RegistrationInformation] = []

       for i in 0...3 {
            regDatas.append(RegistrationInformation(leftTitle: regData[i].vValue, rightTitle: ""))
        }
        for i in 4...7 {
            regDatas.append(RegistrationInformation(leftTitle: "", rightTitle: regData[i].vValue))
        }

//output of regDatas is 

       [Datas.RegistrationInformation(leftTitle: "line 1", rightTitle: ""),
        Datas.RegistrationInformation(leftTitle: "line3", rightTitle: ""),
        Datas.RegistrationInformation(leftTitle: "line5", rightTitle: ""),
        Datas.RegistrationInformation(leftTitle: "line7", rightTitle: ""),
        Datas.RegistrationInformation(leftTitle: "", rightTitle: "line2"),
        Datas.RegistrationInformation(leftTitle: "", rightTitle: "line4"),
        Datas.RegistrationInformation(leftTitle: "", rightTitle: "line6"),
        Datas.RegistrationInformation(leftTitle: "", rightTitle: "line8")]
      

我想要的就像下面的 regDatas

  [Datas.RegistrationInformation(leftTitle: "line 1", rightTitle: "line2"),
        Datas.RegistrationInformation(leftTitle: "line3", rightTitle: "line4"),
        Datas.RegistrationInformation(leftTitle: "line5", rightTitle: "line6"),
        Datas.RegistrationInformation(leftTitle: "line7", rightTitle: "line8")]

我想更改 regDatas 数组结构中的数据位置。 我们该怎么做 谢谢你

【问题讨论】:

  • 请参阅:stackoverflow.com/q/40841663/3141234 遍历其中一个序列,您将可以访问可用于填写注册信息的成对数字
  • @Alexander 我在你的链接中使用了下面的代码``` for (left, right) in stride(from: 0, to: input.count - 1, by: 2) .lazy .map ( { (input[$0], input[$0+1]) } ) { print(left, right) } ```我怎样才能将左右分别存储到RegistrationInformation的左标题和右标题?
  • 类似于你现在的做法:你有regDatas.append(RegistrationInformation(leftTitle: "line\(left)", rightTitle: "line\(right)"))。您的基本问题是您创建的实例数量是您需要的两倍,并且每个实例都有两个字段之一"",这根本不是您想要的

标签: ios swift struct


【解决方案1】:
struct RegistrationInformation {

    let leftTitle: String
    let rightTitle: String

}


struct RegisterData{

    let vValueL : String

}


var regData: [RegisterData] = [
    RegisterData(vValueL: "line1"),
    RegisterData(vValueL: "line2"),
    RegisterData(vValueL: "line3"),
    RegisterData(vValueL: "line4"),
    RegisterData(vValueL: "line5"),
    RegisterData(vValueL: "line6"),
    RegisterData(vValueL: "line7"),
    RegisterData(vValueL: "line8")
]

func compressData(elements: [RegisterData]) -> [RegistrationInformation]{
    var regDatas : [RegistrationInformation] = []
    for i in 0..<elements.count {
        if i != (elements.count-1){
            regDatas.append(RegistrationInformation(leftTitle: regData[i].vValueL, rightTitle: regData[i+1].vValueL))
        }else{
            regDatas.append(RegistrationInformation(leftTitle: regData[i].vValueL, rightTitle: ""))
        }
    }
    return regDatas
}

print(compressData(elements: regData))

【讨论】:

    【解决方案2】:

    不确定您要做什么,这样的帮助:

    let regDatas: [RegistrationInformation] = zip(0...3, 4...7)
        .map { left, right in
            RegistrationInformation(leftTitle: String(left), rightTitle: String(right))
    }
    

    甚至:

    let regDatas: [RegistrationInformation] = (0...3).map { 
        RegistrationInformation(leftTitle: String($0), rightTitle: String($0 + 4))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      相关资源
      最近更新 更多