迭代字符串[] List <string>按字母顺序获取结果</string>

时间:2012-09-19 07:34:28

标签: c# linq list arrays

我将首先在此声明主要问题,以便您可以跳过其余部分。

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

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;
}

绝对尝试使用Ajax autoComplete只是为了让它工作,而不使用Database作为autoComplete数据的来源

虽然我已经解决了主要问题,因为它根本不起作用(;。现在在“修复”问题后,autoComplete确实有效。

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

在你的帮助下,我希望能够直接获得代码(通过本书)。

4 个答案:

答案 0 :(得分:3)

这应该有效

items.Where(item => item.IndexOf(prefixText) >= 0).OrderBy(item => item)

答案 1 :(得分: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;
}

答案 2 :(得分:1)

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

return retLst.OrderBy(item=>item);

对于更完整的重构,请使用PHeiberg的解决方案。

您也可以像这样初始化

List<string> items = new List<string>(){"a", "appl", ...etc}; 

答案 3 :(得分:1)

如果您要过滤前缀为prefixText的所有项目,StartWith会更具纠正性:

items.Where(item => item.StartsWith(prefixText))
     .OrderBy(item => item)