2016-08-01 1 views

답변

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; 
     } 
    } 
} 
관련 문제