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

  • Hidden Wolf TV

    Hidden Wolf

    1 EKİM 2009
  • skiesofblack.net

    skiesofblack

    14 HAZİRAN 2009
  • Xbox

    Xbox

    1 Kasım 2005

İLGİLİ SORU / CEVAPLAR