Вот некоторые проблемы.
- Если массив содержит
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