42611
Swiftではmap,filterなどの便利な機能があるのであまりfor文を使わない方がいいと聞いたのですが、以下のような場合も書き換え可能な方法がありますでしょうか。

```

    var test = ["りんご","ごりら","らっぱ","ぱらしゅーと","とんねる"]
    for i in 0..<test.count{
        if test[i] == "ごりら"{
            test[i] = "ごじら"
        }
    }
    
```

要素をすべて確認して、一致する場合、一致した要素そのものに変更を加えたいのです。
CC BY-SA 3.0
2018-03-23T12:15:06.220
42610
2018-03-25T16:38:17.810
27486
question
swift
Swiftでのfor文の書き換えについて
`map` の中で条件分岐をすれば良いです。

```

    test.map { (s: String) -> String in
        if (s == "ごりら") {
            return "ごじら"
        } else {
            return s
        }
    }
    
```

[Wandbox](https://wandbox.org/permlink/5Nt2ucI0OTZBQYhI)
CC BY-SA 3.0
2018-03-23T12:28:17.977
42611
2018-03-23T12:28:17.977
19110
42610
answer
forとmapは役割が異なるので、単純に置き換えられるわけではありません。  
例に挙げられたプログラムの場合、forループでtest配列そのものを書き換えていますが、mapの場合はtest配列はそのままで、新しい配列がmapの戻り値として返ってきます。  
参考までに。
CC BY-SA 3.0
2018-03-24T03:09:00.000
42622
2018-03-24T03:09:00.000
8077
42610
answer
内部引数名の省略表記（$0）や三項演算子（?）を使ってこんな風にも記述できます。

```

    var test = ["りんご","ごりら","らっぱ","ぱらしゅーと","とんねる"]
    test = test.map {
        $0 == "ごりら" ? "ごじら" : $0
    }
    
```

今回は配列に変更を加える場合なので、変更後の配列を返すmapを利用しましたが、  
変更を加えない場合はmapの代わりにforEachを利用すると良いかと思います。

```

    var test = ["りんご","ごりら","らっぱ","ぱらしゅーと","とんねる"]
    test.forEach {
        print($0)
    }
    
```
CC BY-SA 3.0
2018-03-25T16:38:17.810
42649
2018-03-25T16:38:17.810
19889
42610
answer