Diğer Dilimler
Coddy'nin Rust Journey'sinin Logic & Flow bölümünün bir parçası — ders 57 / 66.
Dize dilimleri çok yararlı olsa da, dilimleme sadece dizelerle sınırlı değildir. Rust'ın dilim kavramı herhangi bir öğe dizisine kadar uzanır ve sahipliği almadan koleksiyonlarla çalışmak için onu güçlü bir araç haline getirir.
Dizilerden ve vektörlerden, dizgiler için öğrendiğiniz aynı söz dizimini kullanarak dilimler oluşturabilirsiniz. Örneğin, bir sayı diziniz varsa, onun bir kısmına veya tamamına başvuran bir dilim oluşturabilirsiniz:
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // Bu bize [2, 3, 4] verir
let full_slice: &[i32] = &numbers; // Bu tüm diziye başvururAynı ilke vektörler için de geçerlidir. Verileri taşımadan veya kopyalamadan verilerin bölümleriyle çalışmak için vektörlerden dilimler oluşturabilirsiniz:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // Bu bize [10, 20] verirGörev
KolayÜç girdi alacaksınız. İlk girdi, virgülle ayrılmış sayılardan oluşan bir listedir. İkinci girdi, bir dilim (slice) oluşturmak için başlangıç ve bitiş indekslerini temsil eden, aralarında boşluk bulunan iki sayıdır. Üçüncü girdi ise dilimden erişilecek bir indeksi temsil eden tek bir sayıdır.
Virgülle ayrılmış sayılardan bir vektör oluşturun, ardından belirtilen aralığı kullanarak bir dilim oluşturun. Dilimdeki verilen indeksteki öğeye erişin ve bunu yazdırın.
Gereksinimler:
- İlk girdiyi (virgülle ayrılmış sayılar) okuyun ve boşlukları temizleyin (trim)
- Girdiyi virgüllere göre ayırın ve her bir sayıyı
i32türüne dönüştürün - Bu sayılardan bir vektör oluşturun
- İkinci girdiyi (boşlukla ayrılmış iki sayı) okuyun ve boşlukları temizleyin
- Başlangıç ve bitiş indekslerini elde etmek için ikinci girdiyi boşluğa göre ayırın
- Her iki indeksi de
usizetürüne dönüştürün &vec[start..end]aralık sözdizimini kullanarak vektörden bir dilim oluşturun- Üçüncü girdiyi (erişilecek indeks) okuyun ve boşlukları temizleyin
- İndeksi
usizetürüne dönüştürün - Dilimdeki belirtilen indeksteki öğeye erişin
- Erişilen öğeyi yazdırın
Girdi:
- İlk satır: Virgülle ayrılmış sayılar (örneğin,
10,20,30,40,50) - İkinci satır: Boşlukla ayrılmış iki sayı (örneğin,
1 4) - Üçüncü satır: Bir indeks numarası (örneğin,
2)
Çıktı:
- Dilimdeki belirtilen indeksteki öğe
Kopya kağıdı
Dilimler (slices) sadece dizelerden değil, dizilerden ve vektörlerden de oluşturulabilir. Sahipliği almadan bir koleksiyonun bir kısmına referans verirler.
Dizilerden dilim oluşturma:
let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // [2, 3, 4] değerlerini referans alır
let full_slice: &[i32] = &numbers; // Tüm diziyi referans alırVektörlerden dilim oluşturma:
let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // [10, 20] değerlerini referans alırDilimler, dize dilimleriyle aynı aralık (range) sözdizimini kullanır ve verileri taşımadan veya kopyalamadan verilerin belirli kısımlarıyla çalışmanıza olanak tanır.
Kendin dene
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// İlk girişi oku (virgülle ayrılmış sayılar)
let first_input = lines.next().unwrap().unwrap();
// İkinci girişi oku (başlangıç ve bitiş indeksleri)
let second_input = lines.next().unwrap().unwrap();
// Üçüncü girişi oku (erişilecek indeks)
let third_input = lines.next().unwrap().unwrap();
// TODO: Kodunuzu aşağıya yazın
// Virgülle ayrılmış sayıları ayrıştırın ve bir vektör oluşturun
// Başlangıç ve bitiş indekslerini ayrıştırın
// Vektörden bir dilim (slice) oluşturun
// Dilimden belirtilen indeksteki elemana erişin
// Sonucu yazdırın
// println!("{}", result);
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
'match' İfadesiBirden Çok Değeri EşleştirmeAralıkları Eşleştirme'if let' İfadesiİfade Olarak DöngülerÖzet - Basit Komut Ayrıştırıcı4Struct'lar ile Verileri Gruplama
Struct Nedir?Struct'lara Genel BakışStruct Alanlarına ErişmeMutable Struct'larFonksiyon Parametresi Olarak Struct'larTuple Struct'larÖzet - Bir Kitap Struct'ı Oluşturun7'Result' ile Hata Yönetimi
'Result' Nedir?'Result' ile 'match' Kullanımıis_ok() ve is_err()Kısayollar: unwrap ve expectSoru İşareti Operatörü '?'String'leri Sayılara DönüştürmeÖzet - Güvenli Bölme Fonksiyonu10Closures ve Anonim Fonksiyonlar
Closure Nedir?Basit Bir Closure TanımlamaParametreli Closure'larOrtamı YakalamakÖzet - Basit Toplayıcı Closure2Vektörlere Giriş
Vektör Nedir?Vektör Oluşturmapush ile Eleman EklemeVektör Elemanlarına ErişmeVektör Üzerinde YinelemeDeğiştirilebilir YinelemeEleman KaldırmaÖzet - Temel Skor Takipçisi5Hash Map'ler ile Anahtar-Değer Çiftleri
Hash Map Nedir?Bir Hash Map OluşturmaAnahtar-Değer Çiftleri EklemeDeğerlere ErişmeBir Hash Map Üzerinde GezinmeBir Değeri GüncellemeBir Çifti KaldırmaÖzet - Kelime Sayacı11Son Meydan Okumalar
Özet - Benzersiz ÖğelerÖzet - Kullanıcı Profili DoğrulayıcıÖzet - Not Özetleyici3Komut Satırı Yapılacaklar Listesi
Proje KurulumuGörev EklemeTüm Görevleri GörüntülemeGörev SilmeFinal Kodu6'Option' ile Yokluğu Yönetme
'Option' Nedir?'Option' ile 'match' Kullanımıis_some() ve is_none()Bir 'Option' Değerini Açmak (Unwrapping)expect MetoduVarsayılan Değer Sağlama: unwrap_orÖzet - Bir Eleman Bulma9String Dilimleri ve Daha Fazlası
String ve &strString Dilimleri OluşturmaFonksiyon Parametresi Olarak DilimlerDiğer DilimlerÖzet - İlk Kelimeyi Bulma