Ordenación por una columna
Las matrices se pueden representar por listas de lista. Por ejemplo, la matriz
1 2 3 4 |
|1 2 5| |3 0 7| |9 1 6| |6 4 2| |
se puede representar por
1 2 3 4 5 |
ej :: [[Int]] ej = [[1,2,5], [3,0,7], [9,1,6], [6,4,2]] |
Definir la función
1 |
ordenaPor :: Ord a => [[a]] -> Int -> [[a]] |
tal que (ordenaPor xss k) es la matriz obtenida ordenando xs por los elementos de la columna k. Por ejemplo,
1 2 3 |
ordenaPor ej 0 == [[1,2,5],[3,0,7],[6,4,2],[9,1,6]] ordenaPor ej 1 == [[3,0,7],[9,1,6],[1,2,5],[6,4,2]] ordenaPor ej 2 == [[6,4,2],[1,2,5],[9,1,6],[3,0,7]] |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import Data.List (sort) ej :: [[Int]] ej = [[1,2,5], [3,0,7], [9,1,6], [6,4,2]] -- 1ª definición ordenaPor :: Ord a => [[a]] -> Int -> [[a]] ordenaPor xss k = map snd (sort [(xs!!k,xs) | xs <- xss]) -- 2ª definición ordenaPor2 :: Ord a => [[a]] -> Int -> [[a]] ordenaPor2 xss k = map snd (sort (map (\xs -> (xs!!k, xs)) xss)) -- 3ª definición ordenaPor3 :: Ord a => [[a]] -> Int -> [[a]] ordenaPor3 xss k = map snd (sort [p | p <- zip (map (!!k) xss) xss]) |
4 Comentarios