在电话键盘上找到字母组合

时间:2014-09-05 18:14:21

标签: c# windows-phone-8 combinations

我正在使用一个拨号器的应用程序,我想在用户按键时搜索联系人。我想搜索与电话号码和联系人姓名相匹配的联系人。我已经实现了根据电话号码搜索联系人的方法,当用户按下键时,它会搜索类似于按下的键的数字。

我的代码是:

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()));

它适用于数字搜索,但不适用于名称搜索。

我想在用户按键时搜索与字母组合匹配的联系人。我怎么做?我正在构建一个Windows手机应用程序,所以它必须在c#。

2 个答案:

答案 0 :(得分: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”作为输入,它除了“bob”之外的所有过滤器。如果你删除6,你会发现它返回全部三个,因为它们的名字都有a,b或c。

仅供参考,如果您希望它与数字相匹配,只需将数字添加到字典中的正则表达式字符串值。

答案 1 :(得分:0)

我对Windows Phone开发不是很熟悉,但我知道有一些联系人搜索功能是Windows Phone SDK的一部分。

您是否尝试过查看Contacts类的SearchAsyc方法?

它可能不适用于此类搜索,但它似乎是一种常见的手机联系搜索类型。

如果不可能,我会说DLeh的解决方案会很好用。