How to sort each column of a matrix with strings in Go

2 Answers

0 votes
package main

import (
    "fmt"
    "sort"
)

func transpose(matrix [][]string) [][]string {
    rows := len(matrix)
    cols := len(matrix[0])
    transposed := make([][]string, cols)

    for i := range transposed {
        transposed[i] = make([]string, rows)
        for j := range matrix {
            transposed[i][j] = matrix[j][i]
        }
    }
    return transposed
}

func sortColumns(matrix [][]string) [][]string {
    // Transpose, sort each column, and transpose back
    transposed := transpose(matrix)

    for i := range transposed {
        sort.Strings(transposed[i])
    }

    return transpose(transposed)
}

func printMatrix(matrix [][]string) {
    for _, row := range matrix {
        fmt.Println(row)
    }
}

func main() {
    matrix := [][]string{
        {"ccc", "zzzz", "x"},
        {"eeee", "aaa", "ffff"},
        {"uu", "hhh", "uuu"},
        {"bbb", "gg", "yyyyyy"},
    }

    fmt.Println("Original Matrix:")
    printMatrix(matrix)

    sortedMatrix := sortColumns(matrix)

    fmt.Println("\nSorted Matrix:")
    printMatrix(sortedMatrix)
}


 
/*
run:
 
Original Matrix:
[ccc zzzz x]
[eeee aaa ffff]
[uu hhh uuu]
[bbb gg yyyyyy]

Sorted Matrix:
[bbb aaa ffff]
[ccc gg uuu]
[eeee hhh x]
[uu zzzz yyyyyy]

*/

 



answered Jun 2 by avibootz
0 votes
package main

import (
    "fmt"
    "sort"
)

// Function to sort each column of the matrix
func sortColumns(matrix [][]string) {
    rows := len(matrix)
    cols := len(matrix[0])

    for col := 0; col < cols; col++ {
        // Extract column into an array
        column := make([]string, rows)
        for row := 0; row < rows; row++ {
            column[row] = matrix[row][col]
        }

        // Sort the column
        sort.Strings(column)

        // Place sorted values back into the matrix
        for row := 0; row < rows; row++ {
            matrix[row][col] = column[row]
        }
    }
}

// Function to print the matrix
func printMatrix(matrix [][]string) {
    for _, row := range matrix {
        fmt.Println(row)
    }
}

func main() {
    matrix := [][]string{
        {"ccc", "zzzz", "yyyyyy"},
        {"eeee", "aaa", "ffff"},
        {"uu", "hhh", "uuu"},
        {"bbb", "gg", "x"},
    }

    fmt.Println("Original Matrix:")
    printMatrix(matrix)

    sortColumns(matrix)

    fmt.Println("\nSorted Matrix:")
    printMatrix(matrix)
}


 
/*
run:
 
Original Matrix:
[ccc zzzz yyyyyy]
[eeee aaa ffff]
[uu hhh uuu]
[bbb gg x]

Sorted Matrix:
[bbb aaa ffff]
[ccc gg uuu]
[eeee hhh x]
[uu zzzz yyyyyy]

*/

 



answered Jun 2 by avibootz
...