SORU
6 EKİM 2008, PAZARTESİ


Perl'de bir diziden bir değer silmek için en iyi yolu nedir?

Dizi çok fazla veri var ve iki öğe silmek istiyorum.

Aşağıda kod parçası kullanıyorum

my @array = (1,2,3,4,5,5,6,5,4,9);
my $element_omitted = 5;
@array = grep { $_ != $element_omitted } @array;

CEVAP
6 EKİM 2008, PAZARTESİ


Eğer zaten silmek istediğiniz öğenin dizinini biliyorsanız ekleme kullanın.

Grep eğer aradığınız çalışır.

Eğer bu bir sürü yapmak gerekiyorsa, o zaman ikili arama gerekli dizini bulmak için yapabilirsiniz beri eğer sıralanmış sırayla diziniz devam edersen çok daha iyi performans alırsınız.

Eğer mantıklı senin bağlamı isteyebilirsiniz kullanmayı düşünün bir "sihirli değeri" için silinen kayıtlar, daha sonra silmek onları, tasarruf hareketi -- veri kümesi silinmiş öğeleri undef, örneğin. Doğal olarak, bu kendi sorunları (illa bilmek istiyorsan sayısı "canlı" elemanları, gereken takip etmek ayrı, vs.), ama olabilir bu zorluğa değdi bağlı olarak uygulama.

EditAslında ikinci bir göz atacağım şimdi grep -- yukarıdaki kod kullanmayın. Daha verimli silme, ekleme ve kaldırmak için kullanmak istediğiniz öğenin dizin (non-eşleşen tüm sonuçları.. birikir olduğunuz kod) bulmak için olurdu

my $index = 0;
$index   until $arr[$index] eq 'foo';
splice(@arr, $index, 1);

İlk geçtiği silecektir. Tüm tekrarlarını silmek tek geçişte tüm dizinler için isteyeceksiniz dışında çok benzer

my @del_indexes = grep { $arr[$_] eq 'foo' } 0..$#arr;

Gerisi dizi bağlayacağın olarak değiştiren unutmayın, okuyucu için bir egzersiz olarak bırakılmıştır!

Edit2John Siracusa doğru sabit, özür dilerim.. benim örnekte bir hata vardı dikkat çekti.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Baby Big Mouth

    Baby Big Mou

    5 Mart 2013
  • SavageLuxxxGaming - Daily NBA 2K15 & NBA Live 15 Enjoy And Subscribe!

    SavageLuxxxG

    11 Ocak 2013
  • Top10Series

    Top10Series

    26 Kasım 2008

İLGİLİ SORU / CEVAPLAR