在我的应用程序中,我从电话中获取联系人列表。我需要在联系人列表中实现上下文过滤/搜索机制。
过滤条件:按联系人姓名数字键上的字母(所有可能的组合)过滤!
当我输入的时候,每个新的号码列表都应该改变,只留下合适的联系人。
就像这里。
http://i.stack.imgur.com/IXZmJ.png
我输入了"253“和应用程序找到的结果。请帮我做这件事。
private List<Contact> contacts = new ArrayList<Contact>();
private List<Contact> sortContacts = new ArrayList<Contact>();
int textlength = 0;
TextView textView;
private class CustomTextWatcher implements TextWatcher {
public void onTextChanged(CharSequence s, int start, int before,
int count) {
textlength = textView.getText().length();
for (int i = 0; i < contacts.size(); i++) {
if (textlength <= contacts.get(i).getName().length()) {
// need help here
}}}}
发布于 2012-10-12 07:52:05
您可以使用trie或radix tree来获取具有特定前缀的所有字符串。
然而,请注意,在您的情况下-您在每次搜索中检查多个前缀,一个可能的解决方案是持有代表字符串的数字的trie,而trie的前导将指向它实际表示的字符串(可能不止一次)。
在查找数字时,使用来自前缀number的简单DFS来获取所有相关字符串。
如果名字列表变化不是很频繁,trie可能是个过头了。相反,您可以存储元组(number,string)
,其中number
是表示数字,string
是排序数组中的名称,并使用binary search获取带有所需前缀的第一个数字,并在找到后通过线性搜索返回所有名称。
但是请注意,在这种情况下插入一个新条目将是O(n)
,所以如果它经常发生-避免这个解决方案,因为它被认为是没有效率的。
https://stackoverflow.com/questions/12850308
复制相似问题