From 9a3a05ce557f868f4d8db2938d5a1450404ca92b Mon Sep 17 00:00:00 2001 From: Zhongheng Liu Date: Wed, 22 Jan 2025 12:57:22 +0200 Subject: [PATCH] feat: add display trait to matrix --- src/types/matrix.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/types/matrix.rs b/src/types/matrix.rs index ff292fc..371d5df 100644 --- a/src/types/matrix.rs +++ b/src/types/matrix.rs @@ -1,10 +1,32 @@ -use std::str::FromStr; +use std::{fmt::Display, str::FromStr}; /// Matrix pub struct Matrix { pub nrows: usize, pub ncols: usize, pub data: Vec>, } +impl Display for Matrix { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut builder = String::new(); + for (i, r) in self.data.iter().enumerate() { + let mut row_str = if i == 0 || i == self.nrows - 1 { + "+".to_string() + } else { + "|".to_string() + }; + for (j, n) in r.iter().enumerate() { + row_str += &format!("{}{}", n, if j == self.ncols - 1 { "" } else { "," }); + } + row_str += if i == 0 || i == self.nrows - 1 { + "+\n" + } else { + "|\n" + }; + builder += &row_str; + } + write!(f, "{}", builder) + } +} impl Matrix { pub fn new(data: Vec>) -> Matrix { Matrix {