使用迭代器而不是Swift中的位置访问数组的元素

时间:2014-10-10 09:49:05

标签: arrays swift iterator iteration

我想知道Swift中是否有数组的迭代器,比如CPP,它允许避免使用 position 来访问数组的下一个元素。

实际上,我在数组中使用 position + 1 来访问它的下一个元素:

var array = ["a", "b", "c", "d"]

func arrayToString(success : String -> Void)
{
    var str = String()

    var myFunc : (Int -> Void)!

    myFunc = {

        if $0 < array.count
        {
            str += array[$0]

            myFunc($0 + 1)
        }
        else
        {
            success(str)
        }
    }

    myFunc(0)
}

arrayToString({

    println($0)

})

我正在寻找可以使用的解决方案:

var array = ["a", "b", "c", "d"]

func arrayToString(success : String -> Void)
{
    var str = String()

    var myFunc : (Iterator -> Void)!

    myFunc = {

        if $0 != nil
        {
            str += array[$0]

            myFunc($0.next)
        }
        else
        {
            success(str)
        }
    }

    myFunc(array.first)
}

arrayToString({

    println($0)

})

有什么建议吗?

2 个答案:

答案 0 :(得分:9)

你想要的是使用发电机:

var array = ["a", "b", "c", "d"]
var g = array.generate()
var str = String()
for (var i = g.next(); i != nil; i = g.next()) {
  str += i!
}

当您想要解析命令行参数时,这非常方便:

var args = Process.arguments.generate()
while let arg = args.next() {
  if (arg == "--output") {
    let output = args.next()!
    ...
  }
}

在Swift 3中,现在变为:

var args = Process.arguments.makeIterator()
while let arg = args.next() {
  if (arg == "--output") {
    let output = args.next()!
    ...
  }
}

答案 1 :(得分:2)

- 我可以想到可以在这里实施的工作,以及map的{​​{1}} 功能的使用。< / p>

对每个元素进行迭代:

Array

<强>输出:

  

2 3 4 5 6

- 因此,通过这种方式,您可以对let arr = [1, 2, 3, 4, 5] arr.map { a in print("\(a + 1) ") } Array的每个元素实现迭代