Как получить средний индекс массива в Swift? - PullRequest
0 голосов
/ 05 октября 2018

У меня ошибка при получении среднего индекса массива.Вот массив:

CountedArray = ["Jake","Jacob","Sam","Tom","Ben","Joe","Bob","Chen","sara","Simon"]

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Попробуйте следующий код:

let middle = CountedArray.count / 2
print(CountedArray[middle])
0 голосов
/ 05 октября 2018

Вот некоторые проблемы.

  • Если массив содержит odd количество элементов, то существует только один средний элемент
  • Если массив содержит even количество элементов, то есть два средние элементы
  • Если массив содержит только один элемент, то это средний элемент
  • Еслимассив содержит только два элемента, тогда оба они являются средними элементами
  • Если массив равен empty, то среднего элемента нет

Учитывая использование вышеВ некоторых случаях я могу найти свой средний элемент (ы) из массива, используя расширение типа массива:

extension Array {
    var middleElements: (first: Element, second: Element?)? {
        if count == 0 {
            return nil
        } else if count.isEven {
            // even number of elements
            let middleIndex = count / 2
            let element1 = self[middleIndex - 1]
            let element2 = self[middleIndex]
            return (element1, element2)
        } else {
            // odd number of elements
            let middleIndex = count / 2
            let element = self[middleIndex]
            return (element, nil)
        }
    }
}

// helper extension
extension Int {
    var isEven: Bool {
        return self % 2 == 0
    }
}

Использование:

Массив с 3 элементами:

let array = ["One", "Two", "Three"]
if let first = array.middleElements?.first {
    print(first) // Prints Two
}
if let second = array.middleElements?.second {
    print(second)
}

Массив с 2 элементами:

let array = ["One", "Two"]
if let first = array.middleElements?.first {
    print(first) // Prints One
}
if let second = array.middleElements?.second {
    print(second) // Prints Two
}

Массив с 1 элементом:

let array = ["One"]
if let first = array.middleElements?.first {
    print(first) // Prints One
}
if let second = array.middleElements?.second {
    print(second)
}

Пустой массив:

let array: [String] = []
if let first = array.middleElements?.first {
    print(first)
}
if let second = array.middleElements?.second {
    print(second)
}
// Prints nothing
0 голосов
/ 05 октября 2018

А как же

let index = CountedArray.count == 0 ? 0 : (CountedArray.count / 2) - 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...