zählt nur Truthy-Werte in einer Sammlung [Duplikat]

7

Ich habe eine Sammlung mit falschen und truthigen Werten. Ich möchte nur die truthy Werte zählen, gibt es eine Möglichkeit, das zu tun?

  

(Anzahl (1 2 3 Null)) = & gt; 5

    
murtaza52 20.09.2012, 18:06
quelle

5 Antworten

19

Wenn Sie die Truthy-Werte beibehalten möchten, müssen Sie nur die Funktion identity verwenden:

%Vor%     
DanLebrero 20.09.2012, 19:07
quelle
6

Ich würde empfehlen, das folgendermaßen zu reduzieren:

%Vor%

Gründe für die Verwendung reduzieren auf diese Weise:

  • Es ist wahrscheinlich effizienter und wird von Clojures neuen Reducer-Funktionen profitieren, die eine Reduzierung von Fakten in vielen Sammlungen ermöglichen
  • Es vermeidet das Erstellen einer Zwischensequenz (was passieren würde, wenn Sie eine Lazy-Sequence-Funktion wie einen Filter verwenden würden)

Wenn Sie bereits eine realisierte Sequenz haben, dann ist das Folgende auch eine gute Option, da es von primitiver Arithmetik in der Schleife profitieren wird:

%Vor%     
mikera 21.09.2012 00:38
quelle
3
___ qstnhdr ___ zählt nur Truthy-Werte in einer Sammlung [Duplikat] ___ qstntxt ___

Ich habe eine Sammlung mit falschen und truthigen Werten. Ich möchte nur die truthy Werte zählen, gibt es eine Möglichkeit, das zu tun?

  

(Anzahl (1 2 3 Null)) = & gt; 5

    
___ answer12519248 ___

Wenn Sie die Truthy-Werte beibehalten möchten, müssen Sie nur die Funktion %code% verwenden:

%Vor%     
___ answer12522842 ___

Ich würde empfehlen, das folgendermaßen zu reduzieren:

%Vor%

Gründe für die Verwendung reduzieren auf diese Weise:

  • Es ist wahrscheinlich effizienter und wird von Clojures neuen Reducer-Funktionen profitieren, die eine Reduzierung von Fakten in vielen Sammlungen ermöglichen
  • Es vermeidet das Erstellen einer Zwischensequenz (was passieren würde, wenn Sie eine Lazy-Sequence-Funktion wie einen Filter verwenden würden)

Wenn Sie bereits eine realisierte Sequenz haben, dann ist das Folgende auch eine gute Option, da es von primitiver Arithmetik in der Schleife profitieren wird:

%Vor%     
___ answer12519592 ___
%Vor%

Obwohl ich zugeben muss, dass ich die Lösung von dAni besser finde.

    
___ answer12520165 ___

Das generelle Muster filtert die Sequenz und zählt die Ergebnisse

%Vor%

Das %code% ist nur ein kurzer Test auf Truthyness, der ein Item nur zurückgibt, wenn es truthy ist oder sonst etwas Falsches (nil)

    
___ tag123clojure ___ Clojure ist ein moderner Lisp-Dialekt für die Java Virtual Machine (mit Versionen für CLR und JavaScript). Clojure ist mehr als nur eine Implementierung von Lisp in Java und bietet Zugriff auf die Klassen und das Ökosystem von Java. ___ antwort12518370 ___

Entfernen Sie einfach Werte, die Sie nicht zählen möchten.

%Vor%     
___
mishadoff 20.09.2012 18:09
quelle
2
%Vor%

Obwohl ich zugeben muss, dass ich die Lösung von dAni besser finde.

    
noahlz 20.09.2012 19:28
quelle
2

Das generelle Muster filtert die Sequenz und zählt die Ergebnisse

%Vor%

Das #(if % %) ist nur ein kurzer Test auf Truthyness, der ein Item nur zurückgibt, wenn es truthy ist oder sonst etwas Falsches (nil)

    
Arthur Ulfeldt 20.09.2012 20:10
quelle

Tags und Links