İki uygulama arasındaki fark nedir? Biri diğerinden daha iyidir. Tuple2Zipped performansının daha iyi olduğunu söyleyen bir blog yazısı var, ancak bir neden sunmuyor ve kaynak koda baktığımda farkı görmüyorum.
val l1 = List(1,2,3) val l2 = List(5,6,7) val v1 = l1 zip l2 val v2 = (l1, l2).zipped
Açık olmaması durumunda, değerleri ve türleri
v1ve
v2farklı: değeri
v1olan türe
List[(Int, Int)]sahiptir
List((1, 5), (2, 6), (3, 7));
v2türü
scala.runtime.Tuple2Zipped[Int, List[Int], Int, List[Int]]vardır ve değeri vardır
(List(1, 2, 3), List(5, 6, 7)).zipped.
Başka bir deyişle, değeri kesin
v1 olarak hesaplanırken ( işlem zaten tamamlanmıştır), tembel olarak hesaplanırken (veya kesin olarak değil ) - aslında zip işlemi saklandı, ancak henüz yürütülmedi.
zip
v2
Yapmak istediğiniz tek şey bu iki değeri hesaplamaksa (ama aslında onları kullanmıyorsanız), o zaman gerçekten
v2daha hızlı hesaplanmayı beklerdim , çünkü aslında çok fazla iş yapmıyor. ;-)
Bunun ötesinde, daha sonra bu değerleri nasıl kullanmayı düşündüğünüze bağlı olacaktır.
Tuple2Zippedİhtiyaç duymadığınız liste öğelerini sıkıştırarak zaman kaybetmeyeceğinden, sonuç listesindeki her demeti işlemeniz gerekmiyorsa daha iyi performans gösterir. Her demete bir işlem uygulamanız gerekiyorsa, ancak işlemden sonra bunlara erişmeniz gerekmiyorsa, muhtemelen bir kenarı olabilir, bu nedenle listeden tek bir geçişe sahip olursunuz.
List.zipSiz içinden birden çok kez yineleme, liste üyelerine üzerinde birden işlemleri gerçekleştirmek için gerekirse yöntem büyük olasılıkla daha iyi bir seçim olacaktır.
Her iki yaklaşım da her durumda işe yarayacaktır. (Genel durumda,
List.zipyalnızca
Tuple2Zippeddaha az biliniyor olması ve kullanımı özel bir gereksinime işaret etmesini tercih ederim .)
Performans gerçekten önemliyse, ScalaMeter gibi bir araç kullanarak ve ikisini doğru bir şekilde ayırt ederek kodunuzla iki yaklaşımı karşılaştırmanızı öneririm . İki yaklaşımın farklı bellek gereksinimleri olduğundan, bellek kullanımının yanı sıra işlem süresinin de karşılaştırılmasını tavsiye ederim.
GÜNCELLEME : Aşağıdaki yorumlarda ek soruya başvurma: "
val m:Map[Int, Int] = (l1 zip l2)(breakOut)ve arasında bir fark var mı
(l1, l2).zipped.toMap?
Bunu şu şekilde yeniden ifade edeceğim:
import scala.collection.breakOut val l1 = List(1, 2, 3) val l2 = List(5, 6, 7) // m1's type has to be explicit, otherwise it is inferred to be // scala.collection.immutable.IndexedSeq[(Int, Int)]. val m1: Map[Int, Int] = (l1 zip l2)(breakOut) val m2 = (l1, l2).zipped.toMap
Tembel
Map diye bir şey yoktur , çünkü haritayı dahili olarak yapılandırmak için haritadaki tüm öğelerin mevcut olması gerekir, böylece anahtar arama yapılırken değerlerin verimli bir şekilde alınmasına izin verilir.
Sonuç olarak, katı bir şekilde değerlendirilen
(l1 zip l2)ile tembel olarak değerlendirilen arasındaki farklılaşma , a'ya
(l1, l2).zippeddönüştürme eyleminde ortadan kalkar
Map.
Peki hangisi daha verimli? Bu özel örnekte, iki yaklaşımın çok benzer şekilde çalışmasını beklerdim.
Hesaplanırken
m1,
zipişlem boyunca dolaşır
l1ve
l2her seferinde kafa elemanları çiftini inceledikten.
breakOutOluşturucu (ayrıca bkz aşağıda yorum bağlantısını) ve beyan edilen sonuç türü
Map[Int, Int], neden
zipbir inşa etmek operasyonu
Map(olmadan sonucunda
breakOut,
zipbir neden olacaktır
List[(Int, Int)]).
Bu yaklaşımı özetlerken, ortaya çıkan harita tek, eşzamanlı geçiş
l1ve aracılığıyla oluşturulur
l2.
('Nin kullanımı
breakOutbir fark yaratır. Haritayı şu şekilde oluşturursak,
(l1 zip l2).toMapbir yineleme yaparız
l1ve bir tane
l2oluştururuz
List[(Int, Int)], sonra sonucu oluşturmak için o listede yineleriz
Map; bu açıkça daha az etkilidir.
Yeni Scala 13 koleksiyonları API'sinde
breakOutkaldırılmıştır. Ancak tip perspektifinden daha iyi çalışan yeni alternatifler var. Daha fazla ayrıntı için bu belgeye bakın.)
Şimdi bir düşünelim
m2. Bu durumda, daha önce belirtildiği gibi, tembel
(l1, l2).zipped bir tuple listesi ile sonuçlanır. Bununla birlikte, bu noktaya kadar, her iki giriş listesinde de yineleme gerçekleştirilmemiştir. Ne zaman
toMapoperasyon yürütür, tembel listedeki her tanımlama grubu ilk başvurulan zaman değerlendirilir ve inşa ediliyor harita eklenir.
Bu yaklaşımı özetlemek gerekirse, ortaya çıkan harita yine tek bir eşzamanlı geçiş
l1ve aracılığıyla oluşturulur
l2.
Bu nedenle, bu özel kullanım durumunda , iki yaklaşım arasında çok az fark olacak. Yine de sonucu etkileyen küçük uygulama ayrıntıları olabilir, bu nedenle içinde çok miktarda veri varsa
l1ve
l2yine de en iyi çözümü bulmak için bunları karşılaştırmak isteyebilirsiniz. Ancak, basitçe
zipişlemi (ile
breakOut) seçip orada bırakmaya meyilli olurum .
Cate Blanchett, kocasıyla tanıştığında tipik flört tavsiyelerine karşı çıktı.
Michael Sheen kar amacı gütmeyen bir aktör ama bu tam olarak ne anlama geliyor?
Ünlü yıldız Colin Egglesfield, RomaDrama Live'da heyecan verici hayran karşılaşmaları hakkında konuştu! artı kongredeki INSPIRE programı.
Northern Exposure'un neden 90'ların en popüler programlarından biri haline geldiğini görmek için bir Blu-ray veya DVD oynatıcının tozunu almanız gerekecek.
Sonifikasyon, verilerin alınması ve sese dönüştürülmesi işlemidir. İçinde yaşadığımız evren söz konusu olduğunda, bilim adamları seslerin kesinlikle başka bir deyişle ve çok güzel olduğunu buluyorlar.
Salonlardan ve kişisel bağışlardan alınan saç kesimleri, petrol sızıntılarını emen ve çevreyi korumaya yardımcı olan paspaslar olarak yeniden kullanılabilir.
Son 200'den fazla yılda Beyaz Saray'da sadece birkaç kişi evlendi. Onlar kimdi ve orada bir düğün yapmak için ne gerekiyor?
Sulu bir greyfurt yeme düşüncesiyle ağzınız heyecanlanıyor mu? Pekala, toplanın, çünkü greyfurt vücudunuzun ihtiyaç duyduğu vitaminler ve antioksidanlarla yüklüdür.
Austin, Teksas'ta asla sıkıcı bir an değil. Yerel TV kanalı KVUE, Austin şehir merkezinin sokaklarında bir otoparktan tehlikeli bir şekilde sarkan bir Toyota 4Runner sahnesinde canlı yayında.
Beyaz üstünlükçü Donald Trump'a kefil olmak için ahşaptan çıkan bir avuç renkli insan hakkında olumlu bir şey varsa, bu Olimpiyat, neredeyse insanüstü başarılara şahit olduğumuza tanıklık ettiğimizdir. .
(Fotoğraf: Bethany Clarke / Getty Images) Twitter, en azından genişletilmiş karakter sayısının yanı sıra geçme ihtimali olan başka bir değişiklik daha yaptı - yani, bazı insanları öfkelendirecek, diğerleri ise biraz daha fazla hissedecek. Beyaz üstünlükçü ve Charlottesville organizatörü Jason Kessler'in doğrulanması üzerine kullanıcılardan şikayetler aldıktan sonra Twitter, küçük mavi onay işaretinin amacı hakkında bir açıklama yayınladı.
Alyssa Parker (KCCI-TV ekran görüntüsü) Bir Buena Vista Üniversitesi amigo kızı, geçen hafta okulun milli marş sırasında oyuncuların ve amigo kızların ayakta durmasını zorunlu kılan bir politika oluşturmasının ardından kadrosundan istifa etti. birinci sınıftan beri takım, bir Eylül sırasında milli marş sırasında diz çökmüş dokuz ponpon kızdan biriydi.
Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday
Oscar kazananın yüzyıl ortası evinde üç yatak odası, iki banyo ve okyanus manzarası bulunuyor.
Jeannie Mai Jenkins, 4 aylık kızı Monaco'yu emzirmek için "Bebeğiniz acıktığında kendinizi çok yorgun hissediyorsunuz, bebek için yeterince üretemiyorsunuz" dedi.
Yaklaşık 10 yıllık çift, 31 Mayıs'ta çıkacak olan yeni A&E gerçeklik dizisi Bobby Brown: Every Little Step'in öncesinde aşk hikayelerini paylaşıyor.
Her yerde gerçekten iyi insanlar var, onları bulmak için aramanız yeterli… Açıklama: “Bunu 2022'de yazarken, küresel bir pandeminin üçüncü yılına giriyoruz. Salgının eğitim üzerindeki etkisi şimdiden ortaya çıkıyor ve geleceğin araştırma kağıtlarından biri olacağından şüpheleniyorum.
Sınıftan ayrılmak isteyen öğretmenler için bir kariyer koçuyum (son zamanlarda kitlesel öğretmen göçüyle ne yazık ki gelişen bir endüstri) ve tekrar tekrar şunu duyuyorum: “Öğretmen olarak başka bir şey yapamayacak kadar çaresizim.” “Öğretmenlik için çok fazla yılım var - kimse bana 10 fitlik bir direğe dokunmak istemiyor.
PCOS, üreme çağındaki kadınları etkileyen hormonal bir hastalıktır ve en yaygın endokrin bozukluklarından biridir. Hastalarda genellikle hiperandrojenizm, amenore ve polikistik over bulunur.
Elvis bir gösteri. Baz Luhrmann'ın konusu ilk kez onun kasırga aşırılıklarıyla tamamen örtüşüyor.