如何从参数化的List <string>返回值(整数,List <string>行)

时间:2019-08-21 18:03:36

标签: c#

如何返回字符串列表并执行返回值,而不打印出来??该函数接受它们并按字典顺序重新排列它们。我的解决方案将它们打印出来。我尝试了以下方法:

public static List<string> paragraph(int number, List<string> lines)
    {
        var words = lines.ToArray();

        var sort = from x in words
                   orderby x
                   select x;

        foreach (var item in sort)
        {
            Console.WriteLine(item);
        }
        return null;            
    }

我唯一能找到的解决方案是将它们打印出来。我可以看到结果。但是,如何存储循环中的item并在main方法中将它们打印出来?非常感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

您正在打印

中的每一行
foreach (var item in sort)  {    Console.WriteLine(item);    }

块 删除for循环并返回“ sort.ToList()”,如

return sort.ToList()

答案 1 :(得分:3)

原始代码中有很多不必要的工作。这就是您需要使用linq对原始列表进行排序并返回它的全部。

public static List<string> paragraph(int number, List<string> lines)
{
    return lines.OrderBy(x => x).ToList();
}

编辑:修复了丢失的箭头并简化了

答案 2 :(得分:2)

我将您的问题解释为:

  

我如何获取一个字符串列表,然后按字典顺序重新排列它们,然后不打印出来就返回它们?

在这种情况下,您只需调用OrderBy来对行进行排序,然后返回调用ToList()的结果即可实现查询:

public static List<string> GetOrderedLines(List<string> lines)
{
    return lines?.OrderBy(line => line).ToList();
}

答案 3 :(得分:-1)

基于使用的变量的名称(一种智能逆向工程)进行模糊的猜测-可能不是OP想要的,但是很明显,他/她想要的不是他/他想要的东西。

public static List<string> Words(int number, List<string> lines)
{
    var separators = new[] {',','.',';',' ','\n','\r'};
    return lines
                .SelectMany(l => l.Split(separators, StringSplitOptions.RemoveEmptyEntries)) // take all words from all lines
                .Select(w => w.ToLowerInvariant()) // make them lowercase
                .Distinct() // remove duplicates
                .OrderBy(w => w)  // lexicographical ordering
                .Take(number) // just to use the int parameter
                .ToList() // materialize result             
}