go语言学习-找出重复行

程序

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	counts := make(map[string]int)
	input := bufio.NewScanner(os.Stdin)
	for input.Scan() {
		if input.Text() == "break" {
			fmt.Println("break here")
			break
		}
		counts[input.Text()]++
	}
	for line, n := range counts {
		// fmt.Printf("%d\t%s\n", n, line)
		if n > 1 {
			fmt.Printf("%d\t%s\n", n, line)
		}
	}
}

使用make 创建类型

1、创建切片

var v := make([] int, 5)

2、创建map

counts := make(map[string] int)

3、创建管道

c = make(chan int )

构造组合类型

m := make([]map[string]int ,5)

fmt.Println(m) // [map[] map[] map[] map[] map[]]

for range 方式遍历map

go常用转义字符:

%d         整数类型

%x,%o, %b     16进制、8进制、2进制

%f,%g, %e      浮点数

%t   布尔型

%c  字符型

%s   字符串

%q   带引号字符串

%v   任意值

%T   任何值类型

%%   输出%

从多个文件中查找重复行

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	counts := make(map[string]int)
	files := os.Args[1:]
	if len(files) == 0 {
		countLines(os.Stdin, counts)
	} else {
		for _, arg := range files {
			f, err := os.Open(arg)
			if err != nil {
				fmt.Println(os.Stderr, "dup2:%v\n", err)
				continue
			}
			countLines(f, counts)
			f.Close()
		}
	}
	for line, n := range counts {
		if n > 1 {
			fmt.Printf("%d\t%s\n", n, line)
		}
	}
}

func countLines(f *os.File, counts map[string]int) {
	input := bufio.NewScanner(f)
	for input.Scan() {
		counts[input.Text()]++
	}
}

注意函数名、常量名、变量名首字母大小写:

go语言是根据大小写来确认访问权限的,大写说明为公有,小写为私有。

利用ioutil包处理多文件查重复行

package main

import (
	"fmt"
	"io/ioutil"
	"os"
	"strings"
)

func main() {
	counts := make(map[string]int)
	for _, filename := range os.Args[1:] {
		data, err := ioutil.ReadFile(filename)
		if err != nil {
			fmt.Fprintf(os.Stderr, "dup3:%v\n", err)
			continue
		}
		for _, line := range strings.Split(string(data), "\n") {
			counts[line]++
		}
		for line, n := range counts {
			if n > 1 {
				fmt.Printf("%d\t%s\n", n, line)
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值