【问题标题】:iterate through a string[] List<string> fetch results alphabetically遍历 string[] List<string> 按字母顺序获取结果
【发布时间】:2012-09-19 07:34:27
【问题描述】:

我将首先在这里声明主要问题,如果您愿意,可以跳过其余部分。

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

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 只是为了让它工作,而不使用数据库作为自动完成数据的源

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

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

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

【问题讨论】:

  • 首先跳过 ToArray。第二是您正在寻找的 Sort() 方法还是什么?那么它只是 items.Sort()

标签: c# linq list arrays


【解决方案1】:

这应该可行

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

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

    • 谢谢你!我没有看到你的回复……乍一看,我把它误认为是我的问题的一部分(:似乎你是第一个(现在再次检查,你实际上是第二个)在时间指示之前回复,所以我看到你真的知道我要提出什么,因为我的代码表明我远非专业开发人员,我喜欢学习编码 .net 方法的适当用法等。我真的很感谢你和你的快速和专业的回答,虽然我还没有测试过,但我会在成功时通知你。干杯
    【解决方案3】:

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

    return retLst.OrderBy(item=>item);
    

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

    你也可以这样初始化

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

    【讨论】:

    • 这就是我想找的东西! ,但是你看我的代码,我没有决定它可能是List&lt;string&gt; 或 string[] 我认为 Ajax 会得到任何结果,所以我的问题是如何通过查看我的代码来实现我是一个小块,我是不是用我的左手类似物刮了我的右耳,通过使用列表两次等......
    【解决方案4】:

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

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

    【讨论】:

    • 你的方法假设比我认为的 contatins 更清晰,逻辑上,虽然我要求(我知道这有点太多)从不需要的行中删除代码。我感谢您分享您的知识 Cunog Le !祝你有美好的一天!
    • 我得到一个错误 items.Where(item => item.StartsWith(prefixText) >= 0).OrderBy(item => item);Error 16 Operator '&gt;=' cannot be applied to operands of type 'bool' and 'int'
    • 感谢您改进排序方法。我会检查一下包含和开头,我想当你考虑硬币的两面时,开头是更快的匹配,虽然包含让你输入完整字符串的任何部分,所以如果你决定是否想要给用户输入的选项.. 说苹果的“pp”,我猜这会计算得慢一点,但不会受限于 surten 规则,所以你会决定目标文本框的策略是什么。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2013-08-11
    • 2021-06-05
    相关资源
    最近更新 更多