【问题标题】:c# infinite stream of text of characters and print them alphabetically [closed]c#无限的字符文本流并按字母顺序打印[关闭]
【发布时间】:2018-08-13 18:45:14
【问题描述】:

如何通过在 C# 中动态读取来按字母顺序打印文本流。

例如:“自动”为“aaacillmottuy”

对于小字符串,我们都知道 .sort() 函数会起作用。但是如果我们有非常大的文本流并且没有无限的内存怎么办

我在想什么。读取字符流和该字符串/流的长度,迭代查找字母“a”并从值 ai=0 开始递增变量 ai++。对其他 25 个字母重复此操作。最后对于 ai 的值 print "number of aaa's then bbb then cc..." 这是我正在考虑的解决方案,最快的一个不消耗太多内存..除非有人在这里有其他逻辑

【问题讨论】:

  • 这是一个很好的问题 - 你尝试过什么?
  • 问问自己:这有可能吗?您必须“向前看”至少一个字符,以查看它是在前一个字符“之前”还是“之后”。之后的角色呢?那之后的呢?你必须“向前看”多远才能确保到目前为止你所拥有的角色的顺序是正确的......而且它永远不会改变?暂时忘记关于“C#”。想想算法。并用你的想法更新你的帖子:)
  • 如何“自动”无限?
  • 这不是一个教程网站。您需要进行一些研究,编写一些代码,并在您的代码出现问题时与我们联系
  • 我在想什么。读取流字符和该字符串/流的长度,迭代查找字母“a”并从 0 开始递增变量 ai++。对其他 25 个字母重复此操作。最后对于 ai 打印“aaa 然后 bbb 然后 cc ...”的数量,这是我正在考虑的解决方案,最快的解决方案是不消耗太多内存.. 除非有人在这里有其他逻辑。

标签: c# string sorting alphabetical


【解决方案1】:
string unsorted = yourStreamText;
string newString = new String(unsorted.OrderBy(x => x).ToArray());

newString 将按字母顺序对流中的字符进行排序。

【讨论】:

  • 为什么必须是列表?当您可以将 char 数组传递给字符串构造函数时,为什么还要构建字符串?此外,这似乎并没有解决 OP 模糊的“无限流”问题。
  • 数组没有 Sort() 函数。
  • true,但数组是 IEnumerable。这将授予您访问 LINQ 的 OrderBy 的权限。
  • See here 举例说明我的意思
  • @maccettura 是的,这样更清洁、更高效。谢谢!
【解决方案2】:

一种方式:

    private static void Main()
    {
        var sorted = string.Empty;
        while (true)
        {
            var readChar = Console.ReadKey().KeyChar;
            sorted = String.Concat((sorted + readChar).OrderBy(c => c));
            Console.WriteLine($"{Environment.NewLine} - Sorted input: {sorted}");
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2011-08-30
    • 2017-10-09
    • 2020-08-18
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多