Saltar al contenido

¿Encontrar el índice del elemento en una lista en Haskell?

Esta noticia fue analizado por especialistas así se garantiza la exactitud de nuestra esta noticia.

Solución:

¿Cómo encontrar el índice del elemento máximo? ¿Qué tal probar todos los índices y verificar si son los máximos?

ghci> let maxIndex xs = head $ filter ((== maximum xs) . (xs !!)) [0..]

Pero esto suena como algo para lo que ya existe una función. Mi código será más legible, mantenible y probablemente incluso más eficiente si utilizo la función existente.

FYI, también puede preguntarle a Hoogle que puede buscar por firmas de tipo Haskell (como sugirió Will):

$ hoogle "Ord a => [a] -> Int" | head



$ # hmm, so no function to give me the index of maximum outright,
$ # but how about finding a specific element, and I give it the maximum?
$ hoogle "a -> [a] -> Int" | head
Data.List elemIndex :: Eq a => a -> [a] -> Maybe Int
Data.List elemIndices :: Eq a => a -> [a] -> [Int]

import Data.List
elemIndex 'b' "abc" === Just 1

Una muy buena herramienta para encontrar funciones haskell es Hoogle. Le permite buscar por tipo de firma, entre otras cosas.

Si quisiera hacer todo en una sola pasada, recomendaría Data.List.mapAccumL, pasando el índice del número más grande encontrado hasta el momento como el acumulador.

Probablemente esto no merezca estar en una respuesta propia, pero aún no puedo comentar. De todos modos, así es como habría escrito esto:

import Data.List
import Data.Ord

maxIndex ::  Ord a => [a] -> Int
maxIndex = fst . maximumBy (comparing snd) . zip [0..]

Más adelante puedes encontrar las reseñas de otros gestores de proyectos, tú de igual forma tienes la habilidad dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *