-3

我有一个错误获取数组的中间索引。这是数组:

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

3 回答 3

0

关于什么

let index = CountedArray.count == 0 ? 0 : (CountedArray.count / 2) - 1
于 2018-10-05T02:25:04.913 回答
0

试试下面的代码:

let middle = CountedArray.count / 2
print(CountedArray[middle])
于 2018-10-05T02:41:29.137 回答
-1

这里有一些担忧。

  • 如果数组包含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
于 2018-10-05T06:52:43.160 回答