ios - 在 Swift 中查找数组中的值(类似于 Excel 中的 VLOOKUP 函数)

标签 ios arrays swift

我对 Swift 3 和一般的编程语言还很陌生。我在一个数组和一个可变收入中有以下数组:

let testArray: [[Double]] = [
    [0,0],
    [1000,20.5],
    [3000,21],
    [4000,22.5],
   ]

var income: Double = 3500

我想做的是类似于 Excel 中的 VLOOKUP 函数:我想在数组的第一列(即 0、1000、3000、4000)中找到一个等于或小于我的变量的数字.在这种情况下,由于收入 = 3500,程序应返回 3000。我尝试使用 filter() 但我不知道如何使用数组中的数组。任何帮助表示赞赏。

最佳答案

您可以进行如下操作。

获取数组的第一列:

let firstColumn = testArray.map { $0[0] }
print(firstColumn) // [0.0, 1000.0, 3000.0, 4000.0]

限制那些小于或等于的元素 给定数量:

let filtered = firstColumn.filter { $0 <= income }
print(filtered) // [0.0, 1000.0, 3000.0]

获取过滤后数组的最大元素。如果元素是 按递增顺序排序,那么您可以使用 last 而不是 max():

let result = filtered.max()!
// Or: let result = filtered.last!
print(result) // 3000.0

综合起来:

let result = testArray.map { $0[0] }.filter { $0 <= income }.max()!
print(result) // 3000.0

一个可能的优化是将mapfilter组合成 平面 map :

let result = testArray.flatMap { $0[0] <= income ? $0[0] : nil }.max()!
print(result) // 3000.0

这段代码假定至少有一个匹配元素, 否则 last!max()! 会崩溃。如果不能保证:

if let result = testArray.flatMap( { $0[0] <= income ? $0[0] : nil }).max() {
    print(result) // 3000.0
} else {
    print("no result")
}

或者提供一个默认值(本例中为0.0):

let result = testArray.flatMap( { $0[0] <= income ? $0[0] : nil }).max() ?? 0.0
print(result) // 3000.0

关于ios - 在 Swift 中查找数组中的值(类似于 Excel 中的 VLOOKUP 函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40702404/

相关文章:

iphone - xcode 计算 JSON 项目

java - 在 Java 8 中如何连接不带分隔符的 String[]?

PHP - 如果值存在于对象数组中

ios - 如何从通知中心删除 MPRemoteCommandCenter

swift - 如何在 Swift 中生成不重复的随机数?

jquery - 如何在 macbook 上捕获删除按键

ios - 如何从 iTunes Connect 中删除应用程序

javascript - touchstart 处理程序在 iframe 中包装时会弄乱文本输入的焦点

java - 我们如何使用 java sql 将数组传递给 IN 参数并从 OUT 参数检索数组

swift - Alamofire 请求丢失 "Content-length"