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)")
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)
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
})
或者使用更显式的变量名:
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;
}
}
}
var numberArray = [4.4,5.3,3.2,2.1,6.0,1.2,9.6,8.0,9.4]
var secontLargestValue = 0.0
var firstLargestValue = 0.0
for value in numberArray {
if value > firstLargestValue {
secontLargestValue = firstLargestValue
firstLargestValue = value
} else if (value > secontLargestValue && value != firstLargestValue)
{
secontLargestValue = value
}
}
print("First largest value - \(firstLargestValue)")
print("Second largest value - \(secontLargestValue)")
9条答案
按热度按时间6jygbczu1#
只需对数组排序并获取所需的值
如果你想要索引,就像这样
如果你对这些东西感到困惑,只要按照下面的正常基础操作就可以了。
nkcskrwz2#
可以使用
enumerate()
创建一个包含(index,value)的元组数组,然后按值对该数组进行排序,以查找两个最大值:的一个或多个字符
rsaldnfx3#
https://github.com/apple/swift-algorithms/blob/main/Guides/MinMax.md
vwkv1x7d4#
kpbpu0085#
尝试在您的发挥gorund
变量项目= [2.01、3.95、1.85、2.65、1.6]
变量排序=项目排序({ $0〉$1 })
打印(已排序)
vd8tlhqk6#
基本思想是循环遍历数组并挑选出最大和第二大的项。
一些可能难以阅读的简短代码:
或者使用更显式的变量名:
yv5phkfx7#
变量数组1 = [1,2,3,4,5]
变量数组2 =数组1.sorted(){ $0〉$1}
打印(数组2)
//单向
设第一个最大值=数组2 [0]
设第二个最大值=数组2 [1]
//回答
打印(第一个最大值)
打印(秒最大值)
ego6inou8#
txu3uszq9#