反向循环;应该很容易

时间:2016-07-02 07:35:13

标签: swift loops

这应该很容易,但我自己很难! 我创建了一个反向For循环来迭代一个集合。 如果集合中有十个数字,那么我可以这样做;

for d in (0..<10).reverse()  {

        print(d)

}

但是我希望与Int匹配,然后像这样在集合中向后计数;

如果myInt = 7,那么我想将7附加到一个数组(我能做到),但也要追加; 6,5,4,3,2,1,9,8按顺序排列数组。

感谢帮助!

3 个答案:

答案 0 :(得分:3)

最简单的方法是将范围拆分为myInt并使用两次单独的迭代。我可能会用这个:

let range: Range<Int> = 0..<10
let pivot: Int = 7

let result = Array(range.startIndex...pivot).reverse()
    + Array(pivot.successor()..<range.endIndex).reverse() // or "pivot + 1"
print(result) // [7, 6, 5, 4, 3, 2, 1, 0, 9, 8]

如果您不想要0,请将其从输入range1..<10)中删除。不要为它创造一个额外的条件。

答案 1 :(得分:1)

在这里你得到这样的数组: -

let myInt = 7
var outPutArray : NSMutableArray = []
var tempArray : NSMutableArray = []
for d in (0..<10)  {
    if myInt-d <= 0
    {
        if myInt-d != 0
        {
            tempArray.addObject(d)
        }

    }else{
        outPutArray.addObject(myInt-d)
    }

}
outPutArray.addObjectsFromArray(tempArray.reverse())

print(outPutArray)


  

7,       6,       5,       4,       3,       2,       1,       8,       9

答案 2 :(得分:0)

与@ Sulthan的答案类似,这个使用stride构建数组:

Swift 2.x:

let (start, end) = (1, 9)
let pivot = 7

let result = Array(pivot.stride(through: start, by: -1)) +
    Array(end.stride(to: pivot, by: -1))
print(result)

输出:

[7, 6, 5, 4, 3, 2, 1, 9, 8]

斯威夫特3:

let result = Array(stride(from: pivot, through: start, by: -1)) +
    Array(stride(from: end, to: pivot, by: -1))