Ver código fonte

sorting report

willie 5 anos atrás
pai
commit
ab50f71a65
1 arquivos alterados com 28 adições e 4 exclusões
  1. 28 4
      GoHash.go

+ 28 - 4
GoHash.go

@@ -12,6 +12,7 @@ import (
 	"os"
 	"path/filepath"
 	"runtime"
+	"sort"
 	"sync"
 	"time"
 
@@ -270,8 +271,8 @@ func loadHashfile(fileStr string) Fdhashes {
 func compareFolder(folder string) {
 	loadAllHashFiles(folder)
 
+	// putting all hashes into one big map key = hash, value list of files with that hash
 	index := make(map[string][]string)
-
 	for _, hashFile := range hashes {
 		for filename, hash := range hashFile.Hashes {
 			values := index[hash]
@@ -283,11 +284,33 @@ func compareFolder(folder string) {
 		}
 	}
 
+	// sorting list of files for every hash and deleting hashes with only 1 entry
+	size := len(index)
+	myHashes := make([]string, 0)
+	for hash, values := range index {
+		count++
+		if count%100 == 0 {
+			fmt.Printf("%d (%d) sorting\n", count, size)
+		}
+		if len(values) > 1 {
+			sort.Strings(values)
+			index[hash] = values
+			myHashes = append(myHashes, hash)
+			//			for _, filename := range values {
+			//				fmt.Printf("  %s\n", filename)
+			//			}
+		} else {
+			delete(index, hash)
+		}
+	}
+	sort.Slice(myHashes, func(i, j int) bool { return index[myHashes[i]][0] < index[myHashes[j]][0] })
+
 	if outputJson {
-		size := len(index)
+		size = len(index)
 		var filesize int64
 		fileCount := 0
-		for hash, values := range index {
+		for _, hash := range myHashes {
+			values := index[hash]
 			count++
 			if count%100 == 0 {
 				fmt.Printf("%d (%d) checking\n", count, size)
@@ -324,7 +347,8 @@ func compareFolder(folder string) {
 		count := 0
 		var filesize int64
 		fileCount := 0
-		for _, values := range index {
+		for _, hash := range myHashes {
+			values := index[hash]
 			count++
 			if count%100 == 0 {
 				fmt.Printf("%d (%d) checking\n", count, size)