2016-11-06 2 views
0

У меня есть массив. Цель состоит в том, чтобы удалить первые два значения индекса. THEN вспомните значения max 3 (а затем и средние значения). Моя проблема вызывает второе и третье максимальное значение Мой метод - вызвать max, затем удалить максимальное значение и вызвать новый массив array1, а затем вызвать максимальное значение из этого массива, которое должно быть вторым вторым наивысшим/максимальным значением.Значение типа Float не имеет зарегистрированного участника

// чтобы вызвать максимальное значение

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) ** Don 't передать float literal в float, просто назначьте его напрямую: 'var max2: Float = -1.0'. ** 2) Не используйте ['sentinel values'] (https://en.wikipedia.org/wiki/Sentinel_value), например' -1', '' "' и т. Д. В Swift. Это именно то, для чего нужны альтернативы. Я предлагаю вам прочитать [руководство по языку] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html) – Alexander

ответ

0

remove(at:) удалит элемент из массива на месте и вернет элемент, который был удален. Не массив.

Try:

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

oh. Ну, как я могу удалить максимальное значение этого массива? – Lucas

+0

в for (index, value) вашего комментария он дает ошибку Тип '() -> EnumeratedSequence >' не соответствует протоколу 'Sequence' – Lucas

+0

Мне не хватало '()' after' enumerated' , Я скопировал эту ошибку случайно из кода в вашем вопросе. – 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 Я надеюсь, что они смежны друг с другом по их индексу. Но если они arent, я хотел бы знать, через печать индекс этих значений – Lucas

+0

@LucasLister ... Что? – Alexander

+0

'initialArray' остается нетронутым. Следовательно, вы все равно можете определить три основных показателя. например: 'topThreeValues.forEach {print (initialArray.index (of: $ 0))}' – Aaron

Смежные вопросы