Как найти повторяющиеся строки, которые встречаются в файле более одного раза - PullRequest
1 голос
/ 14 марта 2019

У меня следующий код для печати строки, которая появляется более одного раза в списке

set a [list str1/str2 str3/str4 str3/str4 str5/str6]
foreach x $a {
  set search_return [lsearch -all $a $x]
  if {[llength $search_return] > 1} {
   puts "search_return : $search_return"
  }
}

Мне нужно напечатать str3 / str4, которая появляется более одного раза в списке

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Канонические способы сделать это с массивами или словарями, оба из которых являются ассоциативными картами.Вот версия с одним циклом над данными с использованием словаря (он не знает общее количество раз, которое элемент появляется при печати, но иногда достаточно просто знать, что у вас есть кратное число).

set a [list str1/str2 str3/str4 str3/str4 str5/str6]

# Make sure that the dictionary doesn't exist ahead of time!
unset -nocomplain counters
foreach item $a {
    if {[dict incr counters $item] == 2} {
        puts "$item appears several times"
    }
}
0 голосов
/ 14 марта 2019

Полагаю, вы могли бы использовать массив для чего-то подобного, поскольку у массивов есть уникальные ключи:

set a [list str1/str2 str3/str4 str3/str4 str5/str6]
foreach x $a {
  incr arr($x)   ;# basically counting each occurrence
}

foreach {key val} [array get arr] {
  if {$val > 1} {puts "$key appears $val times"}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...