63833


Swiftで倍数の文字列配列を作成したいと考えています。

例えば以下のように５の倍数の配列を中身だけ取り出して出力したいです。

[code]

    0,5,10,15,20,25,30,35,40,45,50
    
[/code]

以下のようなコードを書いてみて出力結果は同じになったのですが冗長でしょうか？

[code]

    var numArray: [Int] = []
    for i in 0..<11 {
        numArray.append(i*5)
    }
    let strNumArray = numArray.map{(Optional(String($0)) ?? "")}.joined(separator: ",")
    print(strNumArray)
    
[/code]

もう少し良い書き方があったら教えてください。


CC BY-SA 4.0
2020-03-14T10:55:00.270
63829
2020-03-14T12:26:11.723
36446
question
swift
Swiftで倍数の文字列配列を作成したい


タイトルでは「文字列配列」となっていますが、コード例を見る限り作成されるのは「文字列配列」ではなく、1個の「文字列」ですね。

`String.init(_:)`と言うイニシャライザは決して`nil`を返すことはないのに、それを`Optional`にして、さらに`??
""`をくっつけると言うのは明らかに冗長ですね。

[code]

    let strNumArray = numArray.map{String($0)}.joined(separator: ",")
    
[/code]

または、

[code]

    let strNumArray = numArray.map(String.init).joined(separator: ",")
    
[/code]

などと書くことができます。

また、５の倍数の配列を作る部分も、

[code]

    var numArray: [Int] = Array(stride(from: 0, through: 50, by: 5))
    
[/code]

とか、

[code]

    var numArray: [Int] = (0..<11).map{$0 * 5}
    
[/code]

なんて書き方があります。

* * *

ちなみに中間結果の配列が要らないなら、1行で、

[code]

    let strNumArray = (0..<11).map{String($0 * 5)}.joined(separator: ",")
    
[/code]

なんて、書くこともできます。

おそらく何か別の処理を考える間に出てきた疑問点を簡略化したモノだろうと思うのですが、本来のinになるデータ型や、outとして何が欲しいのか、によっては、違う書き方の方がお勧めになるかもしれません。


CC BY-SA 4.0
2020-03-14T12:26:11.723
63833
2020-03-14T12:26:11.723
13972
63829
answer