필터링 할 문자열 모음이 있습니다. 이 패턴은 다음과 같습니다.큰 문자열 모음 내에서 많은 수의 문자열 찾기
xxx_xxx_xxx_xxx
항상 문자 또는 숫자의 시퀀스는 3 개의 밑줄로 구분됩니다. 각 문자열의 최대 길이는 60 자입니다. 내 컬렉션에는이 중 몇백 만 개가있을 수 있습니다. 내가 효율적으로 이런 일을 수행하는 데 사용할 수있는 어떤 데이터 구조
"def_999_888"등 :로 시작하는 모든 문자열을 가져 오기 "abc_123_456"
:
모든 문자열을 가져 오기로 시작 ..
예를 들어, 나는이 작업을 수행 할 수 있습니다 :
List<String> matched = new ArrayList<String>();
for (String it : strings) {
if (it.startsWith(match)) {
matched.add(it);
}
}
하지만 내 컬렉션이 수백만 자릿수 인 경우 오랜 시간이 걸릴 수 있으며 일치하는 문자열 수가 많으면 더 오래 걸릴 수 있습니다.
높은 수준의 문제는 내가 쓰고있는 앱에 대해 다음 중 어느 질문에 답하고 싶습니다. "어느 친구가 제품 B에 대해 제품 A를 추천 했습니까?" ++ 자바/C/C에서 뭔가 사용자가 빠르게 실행할 수 있다면 위의이 같은 인코딩 된 평면 문자열을 사용,
select recommender from recs where username='me' and prodIdA='a' and prodIdB='b';
궁금 해요 :
를 나는 다음 문을 SQL 테이블에이 정보를 저장하고 실행할 수 있습니다myusername_prodIdA_prodIdB_recommenderusername
당신이 답을 얻기 위해 인코딩 된 문자열의 전체 컬렉션 작동을 시작-A를 할 수있는 아이디어.
이 프로덕션 환경에서 사용할 수없는 가능성이 높습니다처럼 사용자 정의 솔루션을 구현하려고 알고, 그래서 일부의 SQL DB는
감사
id : s는 실제로 기본 숫자입니까? 나는 당신이 더 빨리 그들을 파싱하고 필터링하는 것을 도울 수있는 최적화의 일종을 생각하고있다 ... – Esko
나는 그것을 얻지 못했다 - 왜 당신은 당신의 특정한 높은 수준을 구현하기 위해 주어진 것보다 적은 문자열을 찾을 필요가 있는가? 목표? 연결이 뭐야? 네가 정교 할 필요가 있다고 생각해. –
ID는 모두 영문자이며 ascii입니다. 개념은 특정 형식으로 메모리 키에 쓸 수 있다는 것이 었습니다. 그런 다음 사용자 이름과 두 개의 제품 ID가 주어지면 전체 데이터 세트의 [작게] 연산을 사용하여 내 친구의 모든 추천을 찾을 수 있습니다. 그것은 조금 괴상하다! – user246114