我正在寻找一些有关实现目标的好方法的建议。我觉得下面的伪代码是多余的,并且必须有一种更有效的方法。我的问题是这种方式还是更有效的解决方案?所以这是设置...
我有一个名为Node的类,它有两个属性
class Node
{
bool favorite
string name
}
我有一个包含大约一千个这些节点的列表。 我想给用户三个功能..
过滤列表以显示收藏夹的方法,否则如果收藏夹为false则会显示原始列表
能够按字符串/名称比较进行搜索
搜索和收藏夹组合使用的能力
下面是我的伪代码 - 描述了一种方法,但并不理想。您可以阅读代码中的注释以获得主要要点。
// initial collection of nodes
list<Nodes> initialnodesList = [];
// list of nodes which are displayed in UI
list<Nodes> displayNodes = [];
public void FilterNodes()
{
list<Nodes> tempNodesList = [];
if (favoritesEnabled)
{
// collect favorites
foreach (n in initialnodesList)
if (n.favorite)
tempNodesList.add(n);
// search within favorites if needed and create new list
list<Nodes> searchedNodesList = [];
if (!isStringNullWhiteSpace(searchString))
{
foreach (n in tempNodesList)
if (n.name == searchString)
searchedNodesList.add(n);
displayNodes = searchedNodesList;
return;
}else{
return;
}
}
else
{
// search within initial node collection if needed and create new list
list<Nodes> searchedNodesList = [];
if (!isStringNullWhiteSpace(searchString))
{
foreach (n in initialnodesList)
if (n.name == searchString)
searchedNodesList.add(n);
displayNodes = searchedNodesList;
return;
}
// if search is not needed and favorites were not enabled then just return the original node collection
displayNodes = initialnodesList;
return;
}
}
答案 0 :(得分:3)
您可以使用linq语句优化代码,以根据searchString和favorite选项进行过滤。
public List<Node> FilterNodes(bool seachFavorite, string searchString)
{
return initialnodesList.Where(l => (string.IsNullOrEmpty(searchString) || l.name.StartWith(searchString, StringComparison.OrdinalIgnoreCase)) && l.favorite == seachFavorite).ToList();
}
此外,优化您的代码以使用StartWith查找搜索,如果您希望基于包含字符串搜索进行搜索,则可以更改为包含。