PythonとかGoで使えるスライス。Swiftでは使えなさそうですが、extension
とsubscript
とRangeオペレータ(..
と...
)でそれっぽいのが作れそうだったので試しにやってみました。
// Swift let s = "foobar" let x = s[4] // a let y = s[3..5] // ba
Int
からString.Intex
の簡単な取りかたがわからなかったので、_index
で取れるようにしています。
extension String { func _index(pos:Int) -> String.Index { let end = self.endIndex var p = self.startIndex for var i = 0; i < pos; ++i { if p == end { break; } p = p.succ() } return p } subscript(p:Int) -> String { return self[p..(p+1)] } subscript(r:Range<Int>) -> String { let s = self._index(r.startIndex) let e = self._index(r.endIndex) let range = Range(start:s, end:e) return self.substringWithRange(range) } }
subscript
はオーバーロードできたり2引数以上取れたりするので、行列クラスを作ったりもできそうです。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。