Şu anda, boş olmayan bir dizi farklı pozitif tamsayılar için benzersiz bir group_ID
üretmek için gereken bir Javascript projesi üzerinde çalışıyorum: Bu durumda Javascript - farklı pozitif tamsayılar dizisi için ikili bir temsili hızlı bir şekilde nasıl oluşturabilirim
var a = [1, 2, 5]
0b11001
(yani, bir ikili sayı elemanları 1, 2 ve 5 grupta olduğunu söyler ve diğer elementler bulunmadığına). Burada sipariş önemli değil, bu yüzden
[2, 1, 5]
veya
[5, 1, 2]
için aynı
group_ID === 0b11001
'u alırdım.
Bu kimliği yerel JS veya alt çizgi/lodash kullanarak oluşturmanın hızlı bir yolu olup olmadığını merak ediyorum.
daha moderner 'a.reduce ((p, c) => p | 1 << (c - 1), 0);' – CupawnTae
teşekkür ederiz! 32'den büyük sayılar için çalışmanın kolay bir yolu olmadığı talihsiz bir durumdur. Buraya geldiğim çözüm şu şekildedir: 'groupId = _.reduce (a, function (bin, s) {return bin + Math. pow (2, s-1)}, 0) .toString (2) 'buna rağmen bir String dizisi çıkar. Meraktan, JS ikili diziler vs Strings ile çalışırken daha hızlı olacak? –
Evet ikili sayılar daha hızlıdır ve çözümünüz çoğaltmaları denetlemelidir (eğer oluşabileceklerse) ve hala 53 ile sınırlıdır. –