2016-10-26 3 views

Antwort

3

sie 100 Vergleich Modulo:

let result = filter ((== 67) . (`mod` 100)) numbers 
+0

'' ('mod' 100)' ' –

1

Die anderen Antworten, wenn alle arbeiten Sie wollen eine 2-digit Nummer übereinstimmen. Hier ist eine verallgemeinerte Lösung:

import Data.List (isSuffixOf) 

extractSuff :: Int -> [Int] -> [Int] 
extractSuff n xs = filter (\x -> isSuffixOf (show n) (show x)) xs 

EDIT:

Nach Guvante Vorschlag, ich bin eine andere Lösung hinzugefügt, die keine Zahlen nicht stringify.

extractSuff' :: Int -> [Int] -> [Int] 
extractSuff' n xs = filter (\x -> n == (x `mod` (10^(numDigits n)))) xs 
    where numDigits n 
      | abs n < 10 = 1 
      | otherwise = 1 + numDigits (n `div` 10) 
+0

Ich dagegen würde empfehlen, Sie gehen davon aus, dass die bereitgestellte Zahl keine führenden Nullen hat (da' Int' nicht speichern kann '067' es nur' speichern kann 67 ') und du zeichnest, was die Performance schmerzt. – Guvante

+0

@Guvante, ich habe meine Antwort aktualisiert, um eine Lösung hinzuzufügen, die keine Zahlen enthält. Ich verstehe deine erste Aussage über führende Nullen jedoch nicht. Kannst du es weiter erklären? –

+0

Wenn ich '[1037, 137, 2037]' '' '[1037, 2037]' 'wie würde ich das mit' extractSuff' machen? Beachten Sie, dass, wenn Sie niemals führende Nullen benötigen, dies kein Problem ist, aber wenn Sie dies tun, wird dies komplexer. (Beachte, dass das, was ich erwähne, erfordert, zu entscheiden, wie man mit '37' im obigen Beispiel umgeht). – Guvante

Verwandte Themen