LoginSignup
1
1

More than 5 years have passed since last update.

Swift4 配列を渡すと、文字列・偶数・奇数・小数に分けて表示

Last updated at Posted at 2017-10-01

["あいう", 7, 2, -2, 15, 0.9, 4.98, 9.0]を渡すと、分類表示する関数

Swiftというかプログラミング初心者ですが書いてみました。
https://qiita.com/circular/items/5e56fc73958f4df1494d の少し発展形になります。

分類表示する関数
func classify(_ arraySample:[Any]){

    //結果出力用配列を準備
    var ArrayDecimal:[Double] = []
    var ArrayEvenNumbers:[Int] = []
    var ArrayOddNumbers:[Int] = []
    var ArrayString:[String] = []

    for element in arraySample{

        //配列の要素の型をチェックしていく
        //swiftのcase節は一つにマッチすると、それ以降のcase節は評価されない
        switch element{
        //isは型チェック演算子 左辺のインスタンスが右辺のクラスであれば、trueを返す
        //Int型の場合
        case is Int:
            //ダウンキャスト asは型キャスト演算子
            let castedElementInt = element as! Int

            //偶数の場合 ※Intの場合はtruncatingRemainderが不要(というより使用不可)
            if castedElementInt % 2 == 0{
                ArrayEvenNumbers.append(castedElementInt)

            //奇数の場合
            } else if castedElementInt % 2 != 0{
                ArrayOddNumbers.append(castedElementInt)
            }
        //String型の場合
        case is String:
            let castedElementString = element as! String
            ArrayString.append(castedElementString)

        //Double型の場合  ※Floatでキャッチしようとすると、小数が全てdefaultに流れていってしまった
        case is Double:
            let castedElementDouble = element as! Double
            ArrayDecimal.append(castedElementDouble)

        //switchに与えられた値の型が取りうる全ての値をカバーするcase節が存在するか、default節が存在する必要がある
        default:
            print("Something elseです")
        }
    }
    print("文字列は\(ArrayString)です")
    print("小数は\(ArrayDecimal)です")
    print("偶数は\(ArrayEvenNumbers)です")
    print("奇数は\(ArrayOddNumbers)です")
}


classify(["あいう",  7,  2,  -2,  15,  0.9,  4.98, 9.0])

実行結果

実行結果
文字列は["あいう"]です
小数は[0.90000000000000002, 4.9800000000000004, 9.0]です
偶数は[2, -2]です
奇数は[7, 15]です

9.0も小数扱いされてしまうのが問題点です。

1
1
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1