浅谈切片操作

引言

在很多语言中都有切片这个操作,比如python,rust,go等等,而且大多数都是左闭右开的索引方式。

以rust为例子,我创建了一个String变量,以及它的两个字符串切片。

在rust中,切片就是对 String 类型中某一部分的引用

fn main()
{
  let s = String :: from ("Hello World");
  let hello = &s[0..5];
  let world = &s[6..11];
  println!("{},{}",hello,world);
}

为什么不设计成左闭右闭的呢?

我以前学切片的时候,并不理解这种左闭右开的做法,当时觉得左闭右闭岂不是更加好吗。今天学习了rust切片之后,有了更好的理解。

前面说过,在rust中,切片就是对 String类型中某一部分的引用

具体的存储方式如下图所示。

1

如图,字符串切片的存储包含两个部分指针+长度,而这个长度,正好可以用切片中的[开始索引,结束索引]直接相减得到,于是就非常方便。

所以,用左闭右开的方式。

posted @ 2023-04-12 09:13  wenli7363  阅读(60)  评论(0编辑  收藏  举报