float 번호의 배열에서 2 개의 최대 값을 가져와야합니다. 즉, 하나의 최상위 및 1 초 높은 값이 필요합니다. 색인이있는 간단한 방법이 있습니까? 아니면 구조를 배열로 변경해야합니까?신속하게 float 숫자 배열에서 최대 2 개의 최대 값을 얻을 수 있습니까?
1
A
답변
3
그냥 배열을 정렬하고 인덱스처럼 그들을 얻을하려는 경우 필요한 값
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)
이러한 것들과 혼동하는 경우 다음과 같이 정상적인 기본 사항을 따르십시오. 당신의 플레이 gorund에의
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)")
+0
이 코드는 유용하지만 짧지 만 인덱스를 제공하지 않습니다. –
+0
그래, 내가 대답을 업데이 트했습니다. –
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 decreasing order
let result = arr.enumerate().sort { $0.1 > $1.1 }
print(result)
[(1, 3.1400001), (3, 2.71799994), (2, 1.60899997), (0, 1.20000005), (4, 0.300000012)]
let (topIndex, top) = result[0]
print("top = \(top), index = \(topIndex)")
을
let (secondIndex, second) = result[1]
print("second = \(second), index = \(secondIndex)")
second = 2.718, index = 3
0
시도
VAR 항목 = [2.01, 3.95,1.85,2.65,1.6]
var에 = item.sort 정렬 ({$> 0 $ 1})
인쇄 (정렬 됨)
0
기본적인 아이디어는 배열을 반복하고 최대 및 두 번째로 큰 항목을 선택하는 것입니다. 하드 수 있습니다
일부 짧은 코드 읽기 :
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;
}
}
}
관련 문제
- 1. 최대 두 개의 숫자
- 2. 루아에서 최대 숫자 값을 어떻게 얻을 수 있습니까?
- 3. 2 배열에서 최대 값을 필터링하는 Kotlin 방식?
- 4. 최대 SqlDbType.Int와 같은 SqlDbTypes의 최대 값을 어떻게 얻을 수 있습니까?
- 5. 스레드가있는 2 차원 배열에서 최대 수 찾기
- 6. 루아 얻을 최대 수
- 7. Jquery : 숫자 배열에서 최대 값 가져 오기
- 8. 내 코드에서 최대 2 개의 최대 값을 반환하는 방법
- 9. Python - 배열에서 최대 숫자 반환. 오류
- 10. 혼합 배열의 최대 숫자
- 11. T-SQL 최대 값을 얻을
- 12. 최대 유효 숫자 리눅스
- 13. 최대 절전 모드로 float 값을 Mysql에 삽입하십시오.
- 14. 배열에서 최대 날짜를 찾으십시오
- 15. 이 증가분의 최대 값을 어떻게 얻을 수 있습니까?
- 16. 최소 (최대) 프로세서 상태 값을 얻을 수 있습니까?
- 17. C++ 함수는 double의 배열에서 최대 값을 찾으십니까?
- 18. 목록 및 최대 숫자
- 19. 자바에서 배열의 최대 숫자
- 20. 다차원 배열에서 최대 값을 찾으려면 어떻게합니까
- 21. CUDA 또는 추력 : 그룹화 된 배열에서 n 최대 숫자 얻기
- 22. 숫자 목록에서 최소값과 최대 값을 찾는 방법
- 23. 대상보다 작거나 같은 배열에서 최대 수 찾기
- 24. Z3과 SMT-LIB를 사용하여 최대 2 개의 값을 얻으십시오.
- 25. 루아 최대 숫자 프로그램
- 26. SQL에 최대 길이가있는 숫자 유형이 있습니까?
- 27. kannel에서 보낼 수있는 최대 숫자
- 28. 방법 PL/SQL에서 일부 경우에 최대 값을 얻을 수
- 29. 데이터 배열에서 최소, 최대 값을 반환하는 함수를 작성하는 방법
- 30. 해시 맵에 n 개의 최대 값을 찾기
종류 및 2 첫째을 얻을? –