AHK: удалить дубликаты из списка и добавить количество дубликатов к соответствующим элементам списка - PullRequest
0 голосов
/ 20 мая 2019

Мне нужен код AutoHotkey, который удалит дубликаты из списка, а также добавит счетчик дубликатов к соответствующим элементам списка, например, «x 2».

Вот пример списка:

myList =
)
apple
banana
apple
apple pie
banana
apple
)

Вот список желаемых результатов:

myList =
(
apple x 3
banana x 2
apple pie
)

Я новичок в AHK, и код в целом.Я нашел много хороших кодов для удаления дубликатов, но ни одного, чтобы сосчитать их, как указано выше.Мой собственный подход к решению может быть довольно рудиментарным: он состоит в том, чтобы помещать уникальные предметы («яблочный пирог» выше) в переменную, помещать дублирующиеся предметы (все случаи «банан, яблоко») в отдельную переменную, подсчитывать / уплотнятькак дубликаты, а затем объединить две переменные вместе для «списка желаемых результатов». Однако мой собственный код не будет работать должным образом из-за проблем с подстроками.Вместо того, чтобы разбавлять этот вопрос моим кодом, лучше начать с более опытного и лаконичного подхода.Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 24 мая 2019
MsgBox % CountList( MyList )

CountList( _list ) {
    l := StrSplit(_list,"`n"), out:="`n"
    for i, a in l {
        c:=0
        for j, b in l
            c := (a = b) ? c + 1 : c                
        if !(InStr(out, "`n" a "`t"))
            out .= a (c > 1 ? "`t x " c "`n" : "`n")
    }
    return Trim(out, "`n")
}
...