如何解决如何使用Swift 5查找结构数组项目之一的最小或最大项目索引
让我们说我们有一个结构和一个由该结构组成的数组。
struct MyStruct {
item1: Int = 0
item2: Int = 0
}
var myStruct: [MyStruct] = []
考虑到我们用一些带有追加数据的数据填充了myStruct数组。
myStruct.append(MyStruct(item1: 12,item2:123) )
认为myStruct数组中有10个值,例如[(item1:12,item2:123),...,()]
我们想根据item1的最大值找到myStruct的索引号。
我可以循环执行此操作,但是也许有一种我找不到的现成方法。
这是我在1分钟内找到的解决方案;
func findMaxIndexForItem1() -> Int {
var maxIndex = 0
var max = 0
for k in 0..<myStruct.count {
if myStruct[k].item1 > max {
max = myStruct[k].item1
index = k
}
}
return max
}
解决方法
您可以使用max(by:)
并传递一个闭包,该闭包返回数组的一个索引是否比另一个索引“小”。该方法将使用此方法来确定不小于任何其他索引的索引。
let index = myStruct.indices.max(by:
{ myStruct[$0].item1 < myStruct[$1].item1 }
)
,
您可以通过使MyStruct
符合Comparable
协议来做到这一点。
为了符合Comparable
,您需要指定是什么使实例的两个实例分别为
定义好这些功能后,您将免费获得许多功能。例如:您可以检查两个实例是否相等(根据您的定义),找到最大值,最小值等。
struct MyStruct : Comparable {
var item1: Int = 0
var item2: Int = 0
static func < (lhs : MyStruct,rhs : MyStruct) -> Bool {
return lhs.item1 < rhs.item1
}
static func == (lhs : MyStruct,rhs : MyStruct) -> Bool {
return lhs.item1 == rhs.item1
}
}
let arr = [MyStruct(item1: 20,item2: 0),MyStruct(item1: 10,MyStruct(item1: 5,item2: 0)]
let maxObj = arr.max()
maxObj?.item1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。