我正在使用一个拨号器的应用程序,我想在用户按键时搜索联系人。我想搜索与电话号码和联系人姓名相匹配的联系人。我已经实现了根据电话号码搜索联系人的方法,当用户按下键时,它会搜索类似于按下的键的数字。
我的代码是:
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#。
答案 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的解决方案会很好用。