我可以动态引用数组来执行数学函数吗?
Can I reference an array dynamically to perform a math function?
我有 18 个静态数组,每个数组有 18 个值。
我试着将它们塞进一个巨大的二维数组,但每次都会使编译器崩溃。
我已经意识到数据太多了,但我需要这些值中的每一个来计算一系列复杂的方程式。
我需要这样做更有效率,因为我将不得不多次这样做。
如果我可以编写代码来动态选择一个数组,这会很容易。
一个 2 组件选择器用于 select 2 个值(18 个选择)。
这 18 个选择对应于 18 个数组中的 18 个值。
我需要动态获取的数组由第二个组件 (1) aka choice2 决定。
choice1 = picker.selectedRowInComponent(0)
choice2 = picker.selectedRowInComponent(1)
用户选择要转换的值
numberToConvert = 345.0
下面是数组的示例:
let factorArray0 = [0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764]
let factorArray1 = [0.3544, 0.2053, 0.5854, 0.7452, 0.2379, 0.3042, 0.3595, 0.4101, 0.4438, 0.5098, 0.6448, 0.5165, 0.8691, 1.0000, 1.1354, 1.3688, 1.6125, 1.7446]
let factorArray2 = [0.6544, 0.1033, 0.7854, 0.2452, 0.2375, 0.3022, 0.3525, 0.4701, 0.5038, 0.5011, 0.6488, 0.9165, 0.8291, 1.0000, 1.0354, 1.3388, 1.3125, 1.7166]
等....总共18个不同的数组
这是我目前用来完成工作的方法:
var conversionFactor:Double = 0.0000
if choice1 == 0 {
conversionFactor = factorArray0[choice2]
}else if choice1 == 1 {
conversionFactor = factorArray1[choice2]
}else if choice1 == 2 {
conversionFactor = factorArray2[choice2]
}else if choice1 == 3 {
conversionFactor = factorArray3[choice2]
}else if choice1 == 4 {
conversionFactor = factorArray4[choice2]
}else if choice1 == 5 {
conversionFactor = factorArray5[choice2]
}
//and so on.... if statement for every index 0-17 (18 total values)
if 语句太长了。我有太多高效的编程,不知道任何长的东西都可能是错误的。如果我可以在数组中引用数组名称,我可以这样做:
let arrayOfArrays = [[factorArray1],[factorArray2],[factorArray3],[factorArray4],....[factorArray17]]
//**please imagine the above array is filled with contents of those arrays so I don't paste a gigantic array or arrays**
conversionFactor = arrayOfArrays[choice1][choice2]
这适用于填充整个小数组,但值太多,甚至无法编译。
最终成品为:
answer = conversionFactor * numberToConvert
提问:有没有人有更优雅的解决方案?我认为 enumerate 的某些东西可能会起作用,但无法完全想到如何。最后我需要使用 CoreData 但我正在寻找一个临时解决方案,因为我对如何获取和检索数据数组的所有搜索都没有成功。我正在学习的课程将教我 CoreData,但我有最后期限,所以我只需要一个临时解决方案或有人告诉我什么教程或 CoreData 的一部分可以帮助我。
首先,18 x 18 的数组并不大。它甚至都不大。事实上它很小!
你确实应该建立一个二维数组。
var conversions = [[Double]]
其次,你应该这样填写
conversions = [[1.1,1.2,1.3,....],[2.2,2.2,2.3],[....],...]
你所有的价值观。
那么你的函数应该是
func conversionFactor (choice1:Int,choice2:Int) -> Double {
return conversions[choice1][choice2]
}
这是在全球范围内。您可能应该将其包装在 class
中
class Conversion {
var conversions:[[Int]] = [[1.1,1.2,1.3,....],[2.2,2.2,2.3],[....],...]
class func conversionFactor (choice1:Int,choice2:Int) -> Double {
return conversions[choice1][choice2]
}
}
let conversion = Conversion.conversionFactor(1,2)
您应该可以使用二维数组,18x18 不够大,不会引起问题。我自己检查了一下,编译正常:
import Foundation
let factorTable = [[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764]
]
struct BigArrays {
init() {
let choice1 = 9
let choice2 = 13
print(factorTable[choice1][choice2])
}
}
我有 18 个静态数组,每个数组有 18 个值。
我试着将它们塞进一个巨大的二维数组,但每次都会使编译器崩溃。
我已经意识到数据太多了,但我需要这些值中的每一个来计算一系列复杂的方程式。
我需要这样做更有效率,因为我将不得不多次这样做。
如果我可以编写代码来动态选择一个数组,这会很容易。
一个 2 组件选择器用于 select 2 个值(18 个选择)。 这 18 个选择对应于 18 个数组中的 18 个值。 我需要动态获取的数组由第二个组件 (1) aka choice2 决定。
choice1 = picker.selectedRowInComponent(0)
choice2 = picker.selectedRowInComponent(1)
用户选择要转换的值
numberToConvert = 345.0
下面是数组的示例:
let factorArray0 = [0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764]
let factorArray1 = [0.3544, 0.2053, 0.5854, 0.7452, 0.2379, 0.3042, 0.3595, 0.4101, 0.4438, 0.5098, 0.6448, 0.5165, 0.8691, 1.0000, 1.1354, 1.3688, 1.6125, 1.7446]
let factorArray2 = [0.6544, 0.1033, 0.7854, 0.2452, 0.2375, 0.3022, 0.3525, 0.4701, 0.5038, 0.5011, 0.6488, 0.9165, 0.8291, 1.0000, 1.0354, 1.3388, 1.3125, 1.7166]
等....总共18个不同的数组 这是我目前用来完成工作的方法:
var conversionFactor:Double = 0.0000
if choice1 == 0 {
conversionFactor = factorArray0[choice2]
}else if choice1 == 1 {
conversionFactor = factorArray1[choice2]
}else if choice1 == 2 {
conversionFactor = factorArray2[choice2]
}else if choice1 == 3 {
conversionFactor = factorArray3[choice2]
}else if choice1 == 4 {
conversionFactor = factorArray4[choice2]
}else if choice1 == 5 {
conversionFactor = factorArray5[choice2]
}
//and so on.... if statement for every index 0-17 (18 total values)
if 语句太长了。我有太多高效的编程,不知道任何长的东西都可能是错误的。如果我可以在数组中引用数组名称,我可以这样做:
let arrayOfArrays = [[factorArray1],[factorArray2],[factorArray3],[factorArray4],....[factorArray17]]
//**please imagine the above array is filled with contents of those arrays so I don't paste a gigantic array or arrays**
conversionFactor = arrayOfArrays[choice1][choice2]
这适用于填充整个小数组,但值太多,甚至无法编译。
最终成品为:
answer = conversionFactor * numberToConvert
提问:有没有人有更优雅的解决方案?我认为 enumerate 的某些东西可能会起作用,但无法完全想到如何。最后我需要使用 CoreData 但我正在寻找一个临时解决方案,因为我对如何获取和检索数据数组的所有搜索都没有成功。我正在学习的课程将教我 CoreData,但我有最后期限,所以我只需要一个临时解决方案或有人告诉我什么教程或 CoreData 的一部分可以帮助我。
首先,18 x 18 的数组并不大。它甚至都不大。事实上它很小!
你确实应该建立一个二维数组。
var conversions = [[Double]]
其次,你应该这样填写
conversions = [[1.1,1.2,1.3,....],[2.2,2.2,2.3],[....],...]
你所有的价值观。
那么你的函数应该是
func conversionFactor (choice1:Int,choice2:Int) -> Double {
return conversions[choice1][choice2]
}
这是在全球范围内。您可能应该将其包装在 class
中class Conversion {
var conversions:[[Int]] = [[1.1,1.2,1.3,....],[2.2,2.2,2.3],[....],...]
class func conversionFactor (choice1:Int,choice2:Int) -> Double {
return conversions[choice1][choice2]
}
}
let conversion = Conversion.conversionFactor(1,2)
您应该可以使用二维数组,18x18 不够大,不会引起问题。我自己检查了一下,编译正常:
import Foundation
let factorTable = [[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764],
[0.0595, 0.1682, 0.2668, 0.1075, 0.2711, 0.3479, 0.4099, 0.4285, 0.6767, 0.6486, 0.5290, 0.9579, 1.0000, 1.3147, 1.2999, 1.6438, 1.6542, 2.0764]
]
struct BigArrays {
init() {
let choice1 = 9
let choice2 = 13
print(factorTable[choice1][choice2])
}
}