Ios 如何从swift中的浮点数数组中获取前2个最大值?
我需要从一个浮点数数组(即一个最大值和一个第二个最大值)中获取最大值2。是否有任何简单的方法可以使数组与其索引保持一致,或者我是否需要为此更改数组的结构?您可以使用Ios 如何从swift中的浮点数数组中获取前2个最大值?,ios,arrays,swift,Ios,Arrays,Swift,我需要从一个浮点数数组(即一个最大值和一个第二个最大值)中获取最大值2。是否有任何简单的方法可以使数组与其索引保持一致,或者我是否需要为此更改数组的结构?您可以使用enumerate()创建包含(索引,值)的元组数组然后按值对该数组进行排序,以找到两个最大的值: let arr: [Float] = [1.2, 3.14, 1.609, 2.718, 0.3] // Create an array of (index, value) tuples sorted by value // in d
enumerate()
创建包含(索引,值)的元组数组然后按值对该数组进行排序,以找到两个最大的值:
let arr: [Float] = [1.2, 3.14, 1.609, 2.718, 0.3]
// Create an array of (index, value) tuples sorted by value
// in decreasing order
let result = arr.enumerate().sort { $0.1 > $1.1 }
print(result)
您可以使用
enumerate()
创建包含(索引、值)的元组数组,然后按值对该数组进行排序,以找到两个最大的值:
let arr: [Float] = [1.2, 3.14, 1.609, 2.718, 0.3]
// Create an array of (index, value) tuples sorted by value
// in decreasing order
let result = arr.enumerate().sort { $0.1 > $1.1 }
print(result)
只需对数组排序并获取所需的值
var array1 = [2.1, 2.2, 2.5, 3.0, 4.2, 2]
var array2 = array1.sort(){ $0 > $1}
//One way
let firstMax = array2[0]
let secondMax = array2[1]
//Second way
let firstMax = array2.removeFirst()
let secondMax = array2.removeFirst()
编辑
如果你想要索引,只需要像
let maxPos = array1.indexOf(firstMax)
let secMaxPos = array1.indexOf(secondMax)
如果你对这些东西感到困惑,只需遵循以下基本原则
var max = -1.0, maxPos = -1, secMax = -1.0, secMaxPos = -1
for (index, value) in array1.enumerate() {
if value > max {
max = value
maxPos = index
} else if value > secMax {
secMax = value
secMaxPos = index
}
}
print("max:\(max)->pos:\(maxPos)::secMax:\(secMax)->secMaxPos:\(secMaxPos)")
只需对数组排序并获取所需的值
var array1 = [2.1, 2.2, 2.5, 3.0, 4.2, 2]
var array2 = array1.sort(){ $0 > $1}
//One way
let firstMax = array2[0]
let secondMax = array2[1]
//Second way
let firstMax = array2.removeFirst()
let secondMax = array2.removeFirst()
编辑
如果你想要索引,只需要像
let maxPos = array1.indexOf(firstMax)
let secMaxPos = array1.indexOf(secondMax)
如果你对这些东西感到困惑,只需遵循以下基本原则
var max = -1.0, maxPos = -1, secMax = -1.0, secMaxPos = -1
for (index, value) in array1.enumerate() {
if value > max {
max = value
maxPos = index
} else if value > secMax {
secMax = value
secMaxPos = index
}
}
print("max:\(max)->pos:\(maxPos)::secMax:\(secMax)->secMaxPos:\(secMaxPos)")
试试你的戏吧,高兰德 var项目=[2.01,3.95,1.85,2.65,1.6] var sorted=item.sort({$0>$1})
打印(已排序)尝试播放gorund var项目=[2.01,3.95,1.85,2.65,1.6] var sorted=item.sort({$0>$1})
打印(已排序)基本思想是在数组中循环,选择最大和第二大项 一些可能难以阅读的简短代码:
let myFloatArray : [Float] = ...
let top2 = myFloatArray.enumerated().reduce(((-1, Float.nan), (-1, Float.nan)), combine: { t, v in
// Check if value is larger than first item in tuple
if (!(v.1 <= t.0.1)) {
// Check if value is larger than second item in tuple
if (!(v.1 <= t.1.1)) {
// Return with new value as largest
return (t.1, v)
} else {
// Return with new value as next largest
return (v, t.1)
}
}
// Return old result
return t
})
让myFloatArray:[Float]=。。。
让top2=myFloatArray.enumerated().reduce((-1,Float.nan),(-1,Float.nan)),合并:{t,v in
//检查值是否大于元组中的第一项
if(!(v.1的基本思想是在数组中循环,并选择最大和第二大项
一些可能难以阅读的简短代码:
let myFloatArray : [Float] = ...
let top2 = myFloatArray.enumerated().reduce(((-1, Float.nan), (-1, Float.nan)), combine: { t, v in
// Check if value is larger than first item in tuple
if (!(v.1 <= t.0.1)) {
// Check if value is larger than second item in tuple
if (!(v.1 <= t.1.1)) {
// Return with new value as largest
return (t.1, v)
} else {
// Return with new value as next largest
return (v, t.1)
}
}
// Return old result
return t
})
让myFloatArray:[Float]=。。。
让top2=myFloatArray.enumerated().reduce((-1,Float.nan),(-1,Float.nan)),合并:{t,v in
//检查值是否大于元组中的第一项
如果(!(v.1var array1=[1,2,3,4,5]
var array2=array1.sorted(){$0>$1}
打印(array2)
//单程
设firstMax=array2[0]
设secondMax=array2[1]
//答复
打印(firstMax)
打印(秒最大值)变量数组1=[1,2,3,4,5]
var array2=array1.sorted(){$0>$1}
打印(array2)
//单程
设firstMax=array2[0]
设secondMax=array2[1]
//答复
打印(firstMax)
打印(秒最大值)排序并获取前2个?排序并获取前2个?您的代码既好又短,但它没有为我提供索引。您的编辑结果有一些错误:max:4.2->pos:4::secMax:2.0->secMaxPos:5您的代码既好又短,但它没有为我提供索引。您的编辑有一些错误结果将是:max:4.2->pos:4::secMax:2.0->secMaxPos:5
var largestIndex = -1;
var largestValue = Float.nan;
var secondLargestIndex = -1;
var secondLargestValue = Float.nan;
for index in 0..<myFloatArray.count {
let value = myFloatArray[index];
if (!(value <= secondLargestValue)) {
if (!(value <= largestValue)) {
secondLargestValue = largestValue;
secondLargestIndex = largestIndex;
largestValue = value;
largestIndex = index;
} else {
secondLargestValue = value;
secondLargestIndex = index;
}
}
}