Возможность с str_extract_all()
из stringr
:
sapply(str_extract_all(x, "-?[0-9]+?[0-9]*"), function(x) x[1])
[1] "001" "-08" "-01"
sapply(str_extract_all(x, "-?[0-9]+?[0-9]*"), function(x) x[2])
[1] "979" "976" "975"
Или используя идею @Ruman Luštrik с strsplit()
:
sapply(strsplit(gsub("Demand = ", "", x), " "), function(x) x[1])
[1] "001" "-08" "-01"
Вы хотите использовать Collection, реализующий интерфейс Set, возможно, HashSet, чтобы получить заявленную производительность. См. http://java.sun.com/javase/6/docs/api/java/util/Set.html
Кроме Set
s, в некоторых случаях может потребоваться преобразовать карту
в Set
с помощью Collections.newSetFromMap (Map
(некоторые Map
запрещают нулевые
значения, следовательно, Boolean
).
, как все говорили, HashSet, вероятно, самое простое решение, но у вас не будет постоянного поиска времени в HashSet (поскольку записи могут быть связаны), и вы сохраните фиктивный объект (всегда один и тот же) для каждой записи ...
Для информации здесь список структур данных , возможно, вы найдете ту, которая лучше соответствует вашим потребностям.
Используйте вместо него HashSet . Это хеш-реализация Set , которая используется в основном для того, что вы описываете (неупорядоченный набор элементов).
Обычно вы должны использовать реализацию Set и чаще всего HashSet. Если вам действительно нужен параллельный доступ, то ConcurrentHashSet предоставляет заменяющую функцию, которая обеспечивает безопасный параллельный доступ, включая безопасную итерацию по набору.
I ' Я рекомендую в любом случае ссылаться на него как на просто Set во всем вашем коде, за исключением того места, где вы его создаете; таким образом, легче отказаться от одной реализации для другой, если она вам понадобится позже.
Даже если набор доступен только для чтения , если он используется потоком, отличным от того, который его создает, вы делаете необходимо подумать о безопасной публикации (то есть о том, чтобы убедиться, что любой другой поток видит набор в согласованном состоянии: помните, что любые записи в память, даже в конструкторах, не гарантируются, что будут доступны в другие потоки, когда вы ожидаете или в другом потоке, если вы не предпримете шаги для обеспечения этого). Это можно сделать двумя способами:
Вы можете помочь гарантировать последнее, используя оболочку Collections.unmodifiableSet (). Это дает вам неизменяемое представление о данном наборе - так что при отсутствии других «обычных» ссылок на экранирование набора вы в безопасности.
Вероятно, вы захотите использовать java.util.Set . Реализации включают java.util.HashSet , который является эквивалентом HashMap в Set
. Даже если объекты, содержащиеся в коллекции, не изменяются, вам может потребоваться синхронизация. Нужно ли добавлять новые объекты в набор после того, как набор передается в другой поток? Если это так, вы можете использовать Collections.synchronizedSet () , чтобы сделать Set потокобезопасным.
Если у вас есть карта со значениями, и у вас есть код, который просто хочет рассматривать карту как Set, вы можете использовать Map.entrySet () (хотя имейте в виду, что entrySet возвращает представление Set ключей на карте; если карта изменяема, карту можно изменить с помощью набора, возвращенного entrySet).