【问题标题】:How to loop through two arrays with different amount of items? Swift如何遍历具有不同数量项目的两个数组?迅速
【发布时间】:2019-06-13 11:50:11
【问题描述】:

我有两个具有不同类型(类)和项目数量的数组。当我尝试遍历它们时,我在较小的数组中循环了尽可能多的项目。我需要它循环通过两个,当较小的一端,较大的一端继续循环。希望看到一些建议。

所以,我有两个数组:

var humanArray = [human, cook, manager, fighter, astronaut]

和:

let alienArray = [martian, twixian, snikersian]

它们是不同的类:

 let human = People(name: "John Dou", height: 180, weight: 80, gender: "male")

和:

 let martian = Martian(numberOfLegs: 1, colorOfSkin: .red)

然后我遍历它们:

 for (hum, al) in zip(humanArray, alienArray) {
print("""
    \(hum.TypeName) \(hum.name),
    \(hum.TypeName) \(hum.height),
    \(hum.TypeName) \(hum.weight),
    \(hum.TypeName) \(hum.gender),
    \(al.TypeName) \(al.numberOfLegs),
    \(al.TypeName) \(al.colorOfSkin)
    """)

hum.say()
al.say()
}

那么我应该怎么做才能获得所有 5 次迭代?或者如何在没有“zip”的情况下做这样的事情(循环两个数组)?没有它,我有一个错误:是的,它们被忽略了,但是没有“zip”怎么办?我有一个错误:“类型 '([People], [Martian])' 不符合协议 'Sequence'”。

我的问题与之前提出的问题不同,因为我有两个包含不同数量项目的数组。那里提供的解决方案是不合适的。

【问题讨论】:

  • 当使用zip 时,如果两个数组的长度不同,那么较长数组的附加元素将被忽略。所以fighter, astronaut 没有打印出来
  • 是的,它们被忽略了,但是没有“zip”怎么办?我有一个错误:“类型 '([People], [Martian])' 不符合协议 'Sequence'”
  • 使用两个for循环,每个数组一个
  • 以您的示例为例,您希望它打印出什么?当你的外星人用完时,你希望al.colorOfSkin 成为什么?

标签: arrays swift loops


【解决方案1】:

你可以这样做,

var i = 0
for _ in 0..<min(alienArray.count, humanArray.count) {
    print(humanArray[i].name, alienArray[i].numberOfLegs)
    i += 1
}
print(humanArray[i...].compactMap({ $0.name }).joined(separator: " "))
print(alienArray[i...].compactMap({ $0.numberOfLegs }).joined(separator: " "))

【讨论】:

  • 刚刚得到相同的结果 - 打印前三个元素
  • 可能是我误解了这个问题。你能再澄清一点吗?
  • 谢谢,现在可以了。我自己也解决了这个问题,通过在我的循环中添加一个变量,+= 1,当变量为 3 时,我可以进入第二个循环。但是您的方式要优雅得多,所以再次感谢您。
  • 如果它对您有用,请接受并投票。快乐编码?
  • 我接受了,但当我的声望低于 15 时,我的票数不算数。但我投票了,当我获得 15 个代表时,它就会被计入。
【解决方案2】:

有效但非常基本的解决方案

for i in 0..<(max(arr1.count, arr2.count)) {
    if i < arr1.count {
        print(arr1[i])
    }
    if i < arr2.count {
        print(arr2[i])
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2013-05-15
    • 2021-10-08
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多