Kümeden Eleman Silme
Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 35 / 68.
Bazen kümenizden öğeleri çıkarmanız gerekir ve Go, yerleşik delete() fonksiyonunu kullanarak bunu kolaylaştırır. Kümeniz aslında arka planda bir map olduğu için, bir öğeyi çıkarmak, bir map'ten anahtar çıkarmakla tam olarak aynı şekilde çalışır.
Set'inizden bir öğeyi kaldırmak için, set'iniz ve kaldırmak istediğiniz öğe ile birlikte delete() fonksiyonunu kullanın:
delete(colors, "red")delete() fonksiyonu iki parametre alır: map (kümeniz) ve kaldırmak istediğiniz anahtar. Eğer öğe kümede mevcutsa, kaldırılır. Eğer öğe mevcut değilse, fonksiyon hiçbir şey yapmaz - hata fırlatılmaz.
Bu davranış kümeler için mükemmeldir çünkü başlangıçta orada olup olmadığına bakılmaksızın bir öğenin mevcut olmadığından emin olmak istersiniz. İşlem hızlı ve verimlidir; Go'nun temel map uygulamasının performans avantajlarını korur.
Görev
KolayGo küme deyimini kullanarak farklı tür koleksiyonlarından kitapları kaldıran bir kütüphane kitap yönetim sistemi oluşturun. Bu görev, kaldırma sürecini izlerken kümelerden öğeleri kaldırmak için delete() işlevinin nasıl kullanılacağını gösterir.
İki girdi alacaksınız:
- Virgüllerle ayrılmış kurgu koleksiyonundaki kitapları içeren bir dize (örneğin,
"1984,Dune,Foundation,Neuromancer,Brave New World") - Virgüllerle ayrılmış kaldırılacak kitapları içeren bir dize (örneğin,
"Dune,Harry Potter,Foundation,Twilight,1984")
Göreviniz:
- Kurgu kitaplarını depolamak için Go deyimi olan
map[string]struct{}kullanarak bir küme oluşturun - Tek tek kitap başlıklarını elde etmek için ilk girdi dizesini virgüllerden bölerek ayrıştırın
- Değer olarak boş yapı değişmezi
{}kullanarak her kitabı kümenize ekleyin - Kaldırılacak kitapların listesini elde etmek için ikinci girdi dizesini virgüllerden bölerek ayrıştırın
- Kaldırılacak her kitap için virgül-ok deyimini kullanarak kitabın kümede bulunup bulunmadığını kontrol edin
- İşlenen her kitap için kaldırma sürecini görüntüleyin:
- Kitap koleksiyonda mevcutsa:
"Removing: [book_title]" - Kitap koleksiyonda mevcut değilse:
"Not found: [book_title]"
- Kitap koleksiyonda mevcutsa:
- Kümede bulunan kitapları kaldırmak için
delete()işlevini kullanın - Tüm kaldırma isteklerini işledikten sonra bir özet görüntüleyin:
"Initial collection size: [initial_count]""Removal requests: [requests_count]""Books successfully removed: [removed_count]""Books not found: [not_found_count]""Final collection size: [final_count]"
- Son olarak, koleksiyonda kalan tüm kitapları listeleyin:
- Başlık:
"Remaining books in fiction collection:" - Her kitap ayrı bir satırda:
"- [book_title]" - Hiç kitap kalmadıysa:
"- Collection is empty"
- Başlık:
Girdi dizelerini virgüllerden bölmek için strings paketini kullanın. Bu görev, delete() işlevinin bir Go kümesindeki öğeleri güvenli bir şekilde nasıl kaldırdığını gösterir; mevcut olmayan öğeleri kaldırmaya çalışırken bile hiçbir hata oluşturulmaz. Bu özellik, işleme ve temizleme işlemleri için idealdir.
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
// Boşluk içeren kitap başlıklarını desteklemek için Scanner kullanarak girdiyi oku
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
fictionBooks := scanner.Text()
scanner.Scan()
booksToRemove := scanner.Text()
// Girdi dizelerini ayrıştır
fictionList := strings.Split(fictionBooks, ",")
removeList := strings.Split(booksToRemove, ",")
// YAPILACAK: Kodunuzu aşağıya yazın
// 1. Kurgu kitaplarını saklamak için map[string]struct{} kullanarak bir küme oluşturun
// 2. fictionList içindeki her kitabı kümeye ekleyin
// 3. removeList içindeki her kitabı işleyin ve mevcut olup olmadığını kontrol edin
// 4. Kaldırma işlemini görüntüleyin ve delete() fonksiyonunu kullanın
// 5. Özet istatistikleri görüntüleyin
// 6. Koleksiyonda kalan kitapları listeleyin
// Tutarlı çıktı için kalan kitapları sıralamayı unutmayın
_ = sort.Strings // sort paketini kullandığınızda bu satırı kaldırın
_ = fmt.Println // fmt paketini kullandığınızda bu satırı kaldırın
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Kontrol Akışı
`fallthrough` ile Switchİç İçe Döngülerden ÇıkmaBelirli Bir Döngüye Devam Etme`goto` İfadesiÖzet - İleri Seviye Döngü Kontrolü4Proje: Basit Görev Listesi
Proje KurulumuGörev Ekleme2Structlar ve Metotlar
Structlarda Metot TanımlamaValue Receiver'larPointer Receiver'larReceiver SeçimiMetotlar ve FonksiyonlarÖzet - Struct Davranışı5Derinlemesine Map'ler
Struct Map'leriMap Değeri Olarak Pointer'larNil Map KontrolüMap'leri KarşılaştırmaÖzet - Kelime Frekansı Sayacı3Arayüzler (Temeller)
Arayüz Nedir?Bir Arayüz TanımlamaBir Arayüzü UygulamaArayüz Tiplerini KullanmaBoş ArayüzTip OnaylamalarıTip SeçimiÖzet - Şekiller ve Davranışlar6Deyimsel Go: Kümeler
Go'da Küme DeyimiBir Küme OluşturmaKümeye Eleman EklemeEleman Varlığını Kontrol EtmeKümeden Eleman SilmeKüme Üzerinde YinelemeÖzet - Benzersiz Kullanıcı AdlarıKendi başına pratik yap: Online Go derleyicisi