2

我将首先在这里声明主要问题,因此您可以根据需要跳过其余问题。

如何使结果列表按字母顺序排序?

public static List<string> GenerateMonthNames(string prefixText)
{
    List<string> items = new List<string>();
    items.Add("a");
    items.Add("appl");
    items.Add("ap");
    items.Add("apple");
    items.Add("change");
    items.Add("world");
    items.Add("engaging");

    string[] strArray = items.ToArray();

    string tempFundstr = string.Empty;
    List<string> returnedList= new List<string>();

    int strNumber;
    int strIndex = 0;
    for (strNumber = 0; strNumber < strArray.Length; strNumber++)
    {
        strIndex = strArray[strNumber].IndexOf(prefixText);
        if (strIndex >= 0)
        {
            tempFoundStr = strArray[strNumber];
            retLst.Add(retstr);
        }    
    }

    items.Clear();
    return returnedList;
}

绝望地尝试 AjaxautoComplete只是为了让它工作,而不使用数据库作为自动完成数据的源

虽然我已经解决了主要问题,因为它根本没有工作(;。现在在“修复”问题之后自动完成确实可以工作。但是

这是一种混乱的解决方案,我设法拉出以便遍历列表或数组这里的问题是我无法理解如何通过使用 Linq、枚举或任何实现,所以我将能够返回结果列表按字母顺序排序

在你的帮助下,我希望能把代码弄明白(按书本)。

4

4 回答 4

3

这应该工作

items.Where(item => item.IndexOf(prefixText) >= 0).OrderBy(item => item)
于 2012-09-19T07:40:27.347 回答
2

试试这个:

public static List<string> GenerateMonthNames(string prefixText)    
{
    var items = new List<string>();
    items.Add("Oliver");
    items.Add("Olsen");
    items.Add("learns");
    items.Add("how");
    items.Add("change");
    items.Add("world");
    items.Add("engaging");  

    var returnList = items.Where(item=>item.Contains(prefixTest)).ToList();
    returnList.Sort();

    return returnList;
}
于 2012-09-19T07:42:09.850 回答
1

如果它只是返回您要添加的排序列表,那么这应该可以

return retLst.OrderBy(item=>item);

要进行更完整的重构,请使用 PHeiberg 的解决方案。

你也可以像这样初始化

List<string> items = new List<string>(){"a", "appl", ...etc}; 
于 2012-09-19T07:38:50.217 回答
1

如果要过滤所有具有前缀 is 的项目prefixTextStartWith会更正确:

items.Where(item => item.StartsWith(prefixText))
     .OrderBy(item => item)
于 2012-09-19T07:45:05.640 回答