複数行文字列をリストにしたい
パッケージ化しました
インストール
go get github.com/ergofriend/ml2array
使い方
input := `4 5 2 0 1 2 1 0 2 1 2 1 2 1 1 1 3 1 3 2 3 2 1` result := ml2array.Make(input) for i := 0; i < len(result); i++ { fmt.Printf("%d行目:%s\n", i, result[i]) }
やっていく
現在のテストコード
現在のテストコードは1行ずつリストで足していくやり方です。
func getTests() []testValue { testValues := []testValue{ testValue{ []string{ "3 6", "3 4 5", }, "2"}, } return testValues }
しかし、競プロなどで例として載っけられているテストケースは複数行のテキストです。
↓こんな感じ
これを一回でコピペしてテスト出来るようししていきます。
複数行文字列
goでは、こんな風に書きます。
input := `4 5 2 0 1 2 1 0 2 1 2 1 2 1 1 1 3 1 3 2 3 2 1`
まずappend等での速度低下をなくすために、行数を数えて必要な大きさのスライスを作成します。
var lineCount int for i := range input { if input[i] == 10 { lineCount++ } }
resultArray := make([]string, lineCount)
最後に、各行をスライスに代入します。
var i int scanner := bufio.NewScanner(strings.NewReader(mlstring)) for scanner.Scan() { resultArray[i] = scanner.Text() i++ }
終わりのテストコード
関数化して使いやすくします。
func getTests() []testValue { testValues := []testValue{ testValue{ ml2array.Make(`4 5 2 0 1 2 1 0 2 1 2 1 2 1 1 1 3 1 3 2 3 2 1`), "2"}, return testValues }
完成!