WeakSet - это упрощение WeakMap, где ваша ценность всегда будет логической. Это позволяет вам помечать объекты JavaScript, чтобы только что-то делать с ними один раз или поддерживать свое состояние в отношении определенного процесса. Теоретически, поскольку он не должен содержать значение, он должен использовать немного меньше памяти и выполнять несколько быстрее, чем WeakMap.
var [touch, untouch] = (() => {
var seen = new WeakSet();
return [
value => seen.has(value)) || (seen.add(value), !1),
value => !seen.has(value) || (seen.delete(value), !1)
];
})();
function convert(object) {
if(touch(object)) return;
extend(object, yunoprototype); // Made up.
};
function unconvert(object) {
if(untouch(object)) return;
del_props(object, Object.keys(yunoprototype)); // Never do this IRL.
};
В Unix / Linux используйте команду uniq
согласно ответу Дэвида Локка или sort
согласно комментарию Уильяма Перселла.
Если вам нужен сценарий Python:
lines_seen = set() # holds lines already seen
outfile = open(outfilename, "w")
for line in open(infilename, "r"):
if line not in lines_seen: # not a duplicate
outfile.write(line)
lines_seen.add(line)
outfile.close()
Обновление: Комбинация sort
/ uniq
удалит дубликаты, но вернет файл с отсортированными строками, которые могут или не могут быть что ты хочешь. Приведенный выше сценарий Python не меняет порядок строк, а просто удаляет дубликаты. Конечно, чтобы приведенный выше скрипт тоже сортировался, просто оставьте outfile.write (line)
и вместо этого сразу после цикла выполните outfile.writelines (sorted (lines_seen))
.
Если вы используете * nix, попробуйте выполнить следующую команду:
sort <file name> | uniq
uniqlines = set(open('/tmp/foo').readlines())
это даст вам список уникальных строк.
записать это обратно в какой-либо файл так же просто, как:
bar = open('/tmp/bar', 'w').writelines(set(uniqlines))
bar.close()
получите все ваши строки в списке и сделайте набор строк, и все готово. например,
>>> x = ["line1","line2","line3","line2","line1"]
>>> list(set(x))
['line3', 'line2', 'line1']
>>>
и запишите содержимое обратно в файл.