Swiftで配列の中から文字列長の長いオブジェクトを取得する方法を紹介します。
ここではString型の配列や特定のクラスのString型プロパティの配列から最も長い文字列を持つオブジェクトを取得します。判定の仕方を変更すれば文字列以外での判定をおこなうことも可能です。
スワローズの投手から適当にピックアップしてきました。後述する配列の中で一番名前が長いのは「金伏 ウーゴ」選手です。
String型の配列で最も長い文字列を取得する
文字数を取得するためにはcountメソッド
を使います。String型の配列stringsのreduceメソッド
を使います。reduceメソッド
は与えられたシーケンスを1つの値にまとめることができます。シーケンスの合計を求めることに使われるケースがよく紹介されています。
// 人物名を格納した配列 var strings = ["由規", "石山 泰稚", "秋吉 亮", "村中 恭兵", "バーネット", "金伏 ウーゴ"] // 一番長い人名の選手を取得する let name = strings.reduce(strings[0], combine: { if count($0) > count($1) { return $0 } else { return $1 } }) // 出力 println(name)
上記のサンプルコードのPlaygroundでの出力を見てみましょう。
特定のクラスのString型のプロパティで最も長い文字列を持つオブジェクトを取得する
応用例です。例えば、以下のようなPersonクラス
があるとします。プロパティにはString型のname
だけを持っています。
class Person { let name: String init(_ name: String) { self.name = name } }
前述した比較方法と同じようにreduceメソッドを使って一番長い名前の選手を取得しています。
// 人物名を格納したPerson var array = [Person]() array.append(Person("由規")) array.append(Person("石山 泰稚")) array.append(Person("秋吉 亮")) array.append(Person("村中 恭兵")) array.append(Person("バーネット")) array.append(Person("金伏 ウーゴ")) // 一番長い人名の選手を取得する let maxElement = array.reduce(array[0], combine: { if count($0.name) > count($1.name) { return $0 } else { return $1 } }) // 出力 println(maxElement.name)
上記のサンプルコードのPlaygroundでの出力を見てみましょう。