2014-09-05 5 views
1

전화 걸기 응용 프로그램에서 작업 중이며 사용자가 키를 누르면 연락처를 검색하고 싶습니다. 연락처의 이름과 전화 번호가 일치하는 연락처를 검색하고 싶습니다. 전화 번호를 기반으로 연락처를 검색하는 방법을 구현했습니다. 사용자가 키를 누르면 키와 비슷한 번호가 검색됩니다.전화 키패드에서 문자 조합 찾기

내 코드는 다음과 같습니다

List<string> a = new List<string>(); 
var alphabet = "abc"; 
var al2 = "def"; 

var q = alphabet.Select(x => x.ToString()); 
int size = 3; 
for (int i = 0; i < size - 1; i++) 
    q = q.SelectMany(x => al2, (x, y) => x + y); 

foreach (var item in q) 
    a.Add(item); 

SearchListbox.ItemsSource = listobj 
    .FindAll(x => x.Phone.Contains(str) || 
     x.FirstName.Contains(a.Any().ToString())); 

은 이름 검색 번호 검색에 대해 완벽하게 작동하지만.

사용자가 키를 누르면 문자 조합과 일치하는 연락처를 검색하고 싶습니다. 어떻게해야합니까? 나는 C#에 있어야하므로 Windows 전화 용 앱을 만들고 있습니다.

+1

게시 된 모든 것은 프로그램 설명입니다. 그러나, 우리는 [질문하기] (http://stackoverflow.com/help/how-to-ask)가 필요합니다. 우리는 당신이 우리에게서 원하는 것을 확신 할 수 없습니다. 게시물을 수정하여 Google에서 답변 할 수있는 유효한 질문을 포함하십시오. 알림 : [주제가 무엇인지] (http://stackoverflow.com/help/on-topic)를 숙지하고 프로그램을 작성해달라고 요청하십시오. 제안 사항은 주제와 관련이 없습니다. – gunr2171

+0

@ gunr2171 편집 됨! –

+1

나는 당신이 보여준 코드가 어떻게 작동하지 않는지 아직도 이해하지 못합니다. 당신은 정교 할 수 있습니까? – gunr2171

답변

1

정규 표현식에 적합합니다! 여기에 내가 통해 검색 할 정규식을 사용하도록 채찍질 예입니다 :이 예에서

 var names = new List<string>(); 
     names.Add("alice"); 
     names.Add("bob"); 
     names.Add("charlie"); 

     var digitMap = new Dictionary<int, string>() 
     { 
      { 1, "" }, 
      { 2, "[abcABC]" }, 
      { 3, "[defDEF]" }, 
      { 4, "[ghiGHI]" }, 
      { 5, "[jklJKL]" }, 
      { 6, "[mnoMNO]" }, 
      { 7, "[pqrsPQRS]" }, 
      { 8, "[tuvTUV]" }, 
      { 9, "[qxyzQXYZ]" }, 
      { 0, "" }, 
     }; 

     var enteredDigits = "26"; 
     var charsAsInts = enteredDigits.ToCharArray().Select(x => int.Parse(x.ToString())); 

     var regexBuilder = new StringBuilder(); 
     foreach (var val in charsAsInts) 
      regexBuilder.Append(digitMap[val]); 

     var pattern = regexBuilder.ToString(); 

     //append a ".*" to the end of the regex to make it "StartsWith", beginning for "EndsWith", or both for "Contains"; 
     pattern = ".*" + pattern + ".*"; 

     var matchingNames = names.Where(x => Regex.IsMatch(x, pattern)); 

     Console.WriteLine("Matching input: " + enteredDigits + " as regex: " + pattern); 

     foreach (var n in matchingNames) 
      Console.WriteLine(n); 

, 나는 모든하지만 "밥"을 필터 입력으로 "26"를했다. 6을 제거하면 이름에 모두 a, b 또는 c가 있기 때문에 3을 반환합니다.

참고로 숫자와 일치 시키려면 사전의 정규식 문자열 값에 숫자를 추가하기 만하면됩니다.

+0

형님, 굉장 해요! 그게 내가 무엇을 찾고 있었는지 :) –

+0

잘 작동하지만 그것은 모든 경기를 검색하지 않는다고 생각합니다. –

+0

무엇을 의미합니까? 예제를 제공하다 – DLeh

0

저는 Windows Phone 개발에 익숙하지 않지만 Windows Phone SDK의 일부인 연락처 검색 기능을 알고 있습니다.

연락처 클래스 'SearchAsyc 메서드를 살펴 보셨습니까?

이 검색 유형에서는 작동하지 않지만 전화 연락처를 검색하는 일반적인 유형으로 보입니다.

이것이 가능하지 않다면 DLeh의 솔루션이 잘 작동한다고 말할 수 있습니다.