2016-11-06 4 views
0

배열이 있습니다. 목표는 처음 두 개의 인덱스 값을 제거하는 것입니다. THEN은 최대 3 개의 값을 불러오고 나중에 평균을 구합니다. 내 문제는 두 번째와 세 번째 최대 값을 불러오고있다 내 방법은 최대 값을 호출 한 다음 최대 값을 제거하고 새 배열 array1을 호출 한 다음이 배열에서 최대 두 번째 값/최대 값이어야하는 최대 값을 호출하는 것입니다.플로트 타입의 값에는 열거 멤버가 없습니다.

// 최대 값 호출하기

var ammendedInitialArray = initialArray.dropFirst(2)   
    var max = Float(-1.0) 
    var stepmax1 = Int(-1) 
    for (index, value) in ammendedInitialArray.enumerated() { 
     if value > max{ 
      max = value 
      stepmax1 = index 
     } 

위 ***** 라인이 오류와 함께 제공

ammendedInitialArray1 = ammendedInitialArray.remove(at: stepmax1) 
    var max2 = Float(-1.0) 
    var stepmax2 = Int(-1) 
    *****for (index, value) in ammendedInitialArray1.enumerated{ ***** 
     if value > max{ 
      max2 = value 
      stepmax2 = index 
     } 

작동합니다 Float 형의 값은 회원이

열거 없습니다

글쎄, 나는 그것이 플로트가되는 것을 의미하지는 않았다. 배열이되기를 바란다.

+0

저를 염려 여기에 몇 가지있다 : ** 1) ** 돈 float 리터럴을 float에 넘겨주지 않고 그냥 직접 할당하면됩니다 :'var max2 : Float = -1.0'. ** 2) Swift에서'-1','' "'등의 [sentinel values'] (https://en.wikipedia.org/wiki/Sentinel_value)를 사용하지 마십시오. 이것이 바로 선택 사항입니다. [언어 가이드] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html) – Alexander

답변

0

remove(at:)은 배열에서 요소를 제 위치에서 제거하고 제거 된 요소를 반환합니다. 배열이 아닙니다.

시도 :

ammendedInitialArray.remove(at: stepmax1) 
var max2 = Float(-1.0) 
var stepmax2 = Int(-1) 
for (index, value) in ammendedInitialArray.enumerated() { 
    if value > max { 
     max2 = value 
     stepmax2 = index 
    } 
+0

오를 읽어 보시기 바랍니다. 그렇다면이 배열의 최대 값을 실제로 어떻게 제거합니까? – Lucas

+0

에 대한 귀하의 의견 (색인, 값)에 대한 오류가 발생했습니다 '() -> EnumeratedSequence >'프로토콜 '시퀀스'에 부합하지 않습니다 유형 – Lucas

+0

'열거 형' . 귀하의 질문에있는 코드에서 실수로 해당 버그를 복사했습니다. – Alexander

1

당신 수 전체 작동이 방법을 수행

예 :

var initialArray = [2,5,17,1,3,5,14,6,4,8,7,9] 

var newArray = initialArray.dropFirst(2).sorted().reversed() 
//^17,14,9,8,7,6,5,4,3,1 
let topThreeValues = Array(newArray.prefix(3)) 
//^17,14,9 
topThreeValues.reduce(0, +)/topThreeValues.count 
//^13 
+0

나는 이것을 좋아하지 만 원작의 색인은 아직 남아있을 것이다. 예를 들어,^17,14,9 나는 그들이 색인에서 서로 인접 해 있기를 바랍니다. 그러나 만약 그들이 안다면, 나는이 값의 색인을 인쇄함으로써 알고 싶습니다 – Lucas

+0

@ 루카스 리스터 ... 뭐라고 요? – Alexander

+0

'initialArray'는 변경되지 않습니다. 따라서 여전히 상위 3 가지 지표를 파악할 수 있습니다. 예 :'topThreeValues.forEach {print (initialArray.index (of : $ 0))}' – Aaron