Юлия обнови решението на 25.10.2015 16:34 (преди над 2 години)
+package main
+
+import "strings"
+
+func ExtractColumn(logContents string, column uint8) string {
+ logLines := extractLines(logContents)
+ return getColumn(logLines, column)
+}
+
+func extractLines(logContents string) []string {
+ return strings.Split(logContents, "\n")
+}
+
+func getColumn(logContents []string, column uint8) string {
+ columnElements := make([]string, 0, len(logContents))
+
+ for _, logLine := range logContents {
+ if strings.TrimSpace(logLine) == "" {
+ continue
+ }
+
+ lineColumns := strings.SplitN(logLine, " ", 4)
+ columnElements = append(columnElements, getElement(lineColumns, column))
+ }
+
+ return strings.Join(columnElements, "")
+}
+
+func getElement(lineColumns []string, column uint8) string {
+ if column == 0 {
+ return lineColumns[0] + " " + lineColumns[1] + "\n"
+ }
+ return lineColumns[column+1] + "\n"
+}
много ми харесва как:
- си разделила нещата на множество отделни функции които правят по едно нещо
- как си заделяш правилното количество елементи в columnElements предварително
Забележки:
- повтаряш се с това добавяне на но ред накрая
- може да намалиш конкатенацията на стрингове (новия ред )
- дали не може да се отървеш от
strings.TrimSpace(logLine) == ""
?
TrimSpace-ът беше необходим заради бъг в теста :)