C# 在手机键盘上查找字母组合

C# 在手机键盘上查找字母组合,c#,windows-phone-8,combinations,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 =

我正在开发一个应用程序,它是一个拨号器,我想在用户按键时搜索联系人。我想搜索与电话号码和联系人姓名匹配的联系人。我实现了一种基于电话号码搜索联系人的方法,当用户按键时,它将搜索与按键相似的号码

我的代码是:

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 phone构建一个应用程序,所以它必须是c语言。

这对于正则表达式来说是一个很好的工作!下面是一个使用正则表达式进行搜索的示例:

        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


仅供参考,如果您希望它也与数字匹配,只需将数字添加到字典中的regex字符串值。

我对Windows Phone开发不是很熟悉,但我知道Windows Phone SDK中有联系人搜索功能

您是否尝试过研究Contacts类的SearchAsyc方法

它可能不适用于这种类型的搜索,但它似乎是一种常见的电话联系人搜索类型


如果这是不可能的,我会说DLeh的解决方案会很好地工作。

所发布的只是一个程序描述。然而,我们需要你去。我们不能确定你想从我们这里得到什么。请编辑您的帖子,以包含我们可以回答的有效问题。提醒:请确保您知道,要求我们为您编写程序和建议是离题的。我仍然不明白您显示的代码如何不起作用。你能详细解释一下吗?我也不知道你的代码是怎么写的,除了最后一句话可能与你的问题有关。@gunr217它只适用于数字,它不搜索联系人姓名你已经说过了。我们需要更多的信息。兄弟,你太棒了!这就是我想要的:它工作正常,但我认为它不会搜索所有的匹配项。你是什么意思?举个例子