Filter duplicates with map (#139)

The previous method of filtering duplicates only worked on duplicates that occurred consecutively. Since dupes happen out of order often, this switches the logic to instead use a map of seen commands and filter based on that.
This commit is contained in:
Ben 2023-12-05 23:43:01 -06:00 committed by GitHub
parent be3ad76e68
commit c8643d5a2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 8 deletions

View File

@ -157,19 +157,25 @@ func DisplayResults(ctx context.Context, results []*data.HistoryEntry, numResult
tbl := table.New(columns...)
tbl.WithHeaderFormatter(headerFmt)
lastCommand := ""
numRows := 0
var seenCommands = make(map[string]bool)
for _, entry := range results {
if entry != nil && strings.TrimSpace(entry.Command) == strings.TrimSpace(lastCommand) && config.FilterDuplicateCommands {
continue
if config.FilterDuplicateCommands && entry != nil {
cmd := strings.TrimSpace(entry.Command)
if seenCommands[cmd] {
continue
}
seenCommands[cmd] = true
}
row, err := BuildTableRow(ctx, config.DisplayedColumns, *entry)
if err != nil {
return err
}
tbl.AddRow(stringArrayToAnyArray(row)...)
numRows += 1
lastCommand = entry.Command
if numRows >= numResults {
break
}

View File

@ -498,13 +498,20 @@ func getRows(ctx context.Context, columnNames []string, query string, numEntries
}
var rows []table.Row
var filteredData []*data.HistoryEntry
lastCommand := ""
var seenCommands = make(map[string]bool)
for i := 0; i < numEntries; i++ {
if i < len(searchResults) {
entry := searchResults[i]
if strings.TrimSpace(entry.Command) == strings.TrimSpace(lastCommand) && config.FilterDuplicateCommands {
continue
if config.FilterDuplicateCommands && entry != nil {
cmd := strings.TrimSpace(entry.Command)
if seenCommands[cmd] {
continue
}
seenCommands[cmd] = true
}
entry.Command = strings.ReplaceAll(entry.Command, "\n", "\\n")
row, err := lib.BuildTableRow(ctx, columnNames, *entry)
if err != nil {
@ -512,7 +519,6 @@ func getRows(ctx context.Context, columnNames []string, query string, numEntries
}
rows = append(rows, row)
filteredData = append(filteredData, entry)
lastCommand = entry.Command
} else {
rows = append(rows, table.Row{})
}