["あいう", 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も小数扱いされてしまうのが問題点です。