ค้นหาความยาวของสตริง

Rust:
ค้นหาความยาวของสตริง

วิธีการ:

Rust ให้คุณใช้ len() สำหรับความยาวโดยตรง:

fn main() {
    let greeting = "Hello, world!";
    println!("Length: {}", greeting.len());
}

ผลลัพธ์: Length: 13

แต่ระวัง, len() นับเป็นไบต์, ไม่ใช่ตัวอักษร สำหรับนับจำนวนตัวอักษร, ใช้ .chars().count():

fn main() {
    let greeting = "¡Hola, mundo!";
    println!("Character count: {}", greeting.chars().count());
}

ผลลัพธ์: Character count: 12

ลงลึก

len() นับเป็นไบต์เพราะว่าสตริงใน Rust เป็นรหัส UTF-8 โดยประวัติศาสตร์, คอมพิวเตอร์รุ่นแรกใช้ ASCII, ที่แทนแต่ละตัวอักษรด้วยไบต์เดียว UTF-8, อย่างไรก็ตาม, รองรับอักขระหลากหลาย, ใช้ 1 ถึง 4 ไบต์ต่อตัว

เมื่อคุณเรียก len(), Rust นับไบต์ในสตริง, ซึ่งเร็วแต่ไม่จำเป็นต้องตรงกับจำนวนตัวอักษรเสมอไป ตัวอย่างเช่น, อิโมจิหรือตัวอักษรที่มีเครื่องหมายอักขระต่างๆ นั้นใช้ไบต์มากกว่าหนึ่งไบต์ นั่นเป็นเหตุผลว่าทำไม .chars().count() จึงสำคัญ — มันวนซ้ำผ่านตัวอักษรและให้จำนวนค่า Unicode scalar, ซึ่งเป็นจำนวนตัวอักษรที่คนส่วนใหญ่คาดหวัง

สำหรับทางเลือก, .chars().count() มีความแม่นยำแต่ช้าสำหรับสตริงยาวๆ เพราะต้องวนซ้ำผ่านตัวอักษรทุกตัว ถ้าประสิทธิภาพเป็นสิ่งสำคัญ, และคุณมั่นใจว่ากำลังจัดการกับอักขระ ASCII หรือ Unicode ที่มีขนาดคงที่, len() จึงมีประสิทธิภาพมากกว่า

ในที่สุด, จำไว้ว่าการดัชนีสตริงของ Rust ไม่อนุญาตให้เข้าถึงโดยตรงโดยตำแหน่งตัวอักษร เนื่องจากการทำงานของรหัส UTF-8 Rust ป้องกันการดำเนินการที่อาจทำให้สตริงแตกหรือตัดที่จุดที่ไม่ถูกต้อง ซึ่งอาจไม่แสดงถึงตัวอักษรเต็ม

อ่านเพิ่มเติม