【发布时间】:2017-06-02 01:11:04
【问题描述】:
我想返回给定自定义对象数组中的第一项,并返回一个索引数组和第一个自定义对象元素,以便我可以在它周围包裹一个保护语句。
即:
let firstOrder = existingOrders.enumerated().flatMap{$0,$1}.first
或尝试#1
let array = existingOrders.enumerated().map { (a, b) in return [$0.index : $1.element] }.first
或尝试#2
let array = existingOrders.enumerated().map { ($0.offset, $0.element) }.first
print (array)
这不是返回实际对象;它似乎返回一个元组。
在哪里
existingOrders = [ExistingOrder, EngineYard.ExistingOrder, EngineYard.ExistingOrder]
它返回以下内容;
[(0, EngineYard.ExistingOrder), (1, EngineYard.ExistingOrder), (2, EngineYard.ExistingOrder)]
尝试#3;
let array = existingOrders.enumerated().map { ($0.offset, $0.element) }
print (array)
guard let firstOrder = array.first else {
break
}
print (firstOrder) // should be a tuple of index and custom object
如何获取数组中可选的第一项并返回索引和元素?
非常感谢
编辑。我这样做的原因是我可以将正确的对象转移到另一个类。
// transfer all
while (factory.existingOrders.count > 0) {
let array = myOrderBook.existingOrders.enumerated().map { ($0.offset, $0.element) }
guard let firstOrder = array.first else {
break
}
let index = (firstOrder.0)
factory.orderBook.transfer(index: index, destination: .completedOrder)
}
Orderbook 是一个类;
Factory {
var orderBook:OrderBook = OrderBook()
}
OrderBook {
var existingOrders: [ExistingOrder] = [ExistingOrder]()
var completedOrders: [CompletedOrder] = [CompletedOrder]()
}
我的想法是我想将一个对象从现有订单转移到已完成的订单,反之亦然
该函数需要一个索引,但我想我可以重构它,以便可以传输一个对象。
【问题讨论】:
-
请举例说明您要达到的目标。
-
我认为尝试 #3 给了我想要的结果;我有一组自定义对象,我需要在元组中获取第一个对象及其索引,并且命令
existingOrders.enumerated().map { ($0.offset, $0.element) }似乎可以做到这一点(至少在快速操场上) -
如果你知道它是第一个元素,那你为什么要它的索引?
-
这是因为我需要在一个函数中使用我将对象从当前对象转移到另一个对象并且我需要索引来执行此操作。虽然现在你提到了它,但我想我可以重构我的代码,所以我只传递对象。
-
是的,我正在重构我的代码。我会结束这个问题。现在谢谢。
标签: arrays swift filtering enumeration