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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。