【问题标题】:Sorting array from txt file从txt文件排序数组
【发布时间】:2015-10-08 03:19:59
【问题描述】:

我有一个代码,它为 txt 文件中使用的所有字母创建一个数组,名为“failas.txt”:

using System;
using System.Linq;
using System.Globalization;
using System.Collections.Generic;
using System.Collections;
using System.IO;
using System.Text;
class Program
{
     static void Main()
     {
         string failas = "failas.txt";
         string rodymas = File.ReadAllText(failas, Encoding.GetEncoding(1257));
         Console.OutputEncoding = Encoding.UTF8;
         Console.WriteLine(rodymas);
         char[] masyvas = rodymas.ToArray().Reverse().Where(c => !char.IsWhiteSpace(c)).ToArray();
         foreach (char c in masyvas)

         {
     Console.Write(c + ",");
         }
         Console.ReadLine();
    }
}

它反转数组。但是我需要它不要反转,而是按字母顺序对其进行排序,并排除 ,.:" 等符号。基本上排除所有不是字母的东西。

【问题讨论】:

  • 嗯,你正在扭转它。你期待什么?编辑:另外,你所有的ToArray 电话都是多余的。
  • 好吧,也许我表述错了。我从中删除了反向。但是有两个问题,一个 - 我不知道如何排除这些不需要的非字母符号,第二个,来自 txt 文件的文本以 1257 编码,因此这意味着非英文字母位于和大批。我不知道如何解决这个问题

标签: c# arrays sorting


【解决方案1】:
char[] masyvas = rodymas.ToArray().OrderBy(o=>o).Where(c => !char.IsWhiteSpace(c)).ToArray();

这会帮你搞定的。

【讨论】:

  • 当你没有更新你的问题时,我写了答案。现在你已经更新了它,也让它变得有趣了。我会做。干杯!
【解决方案2】:

解决反向和字母问题:

char[] masyvas = rodymas.ToArray().Where(c => !char.IsWhiteSpace(c)).ToArray();

masyvas.Sort(); //Will sort in place alphabetically. 

Sort a list alphabetically

对于字符,您可以使用Regex查看此解决方案

Regex rgx = new Regex("[^a-zA-Z0-9 -]");
str = rgx.Replace(str, "");

另请参阅: How do I remove all non alphanumeric characters from a string except dash?

【讨论】:

  • 现在对它进行排序,但是问题仍然是大写字母在数组的开头,非英文字母在结尾。不管是大写还是小写,还是像这些 ą č ę ė į š ų ū ž 这样的非英文符号。
  • 我不确定是否有专门针对您需要的语言字符集的支持。您可能会考虑使用自己的订单定义编写自己的 Sort 方法,这可能会很乏味。
【解决方案3】:

这条线怎么样?

        char[] masyvas = rodymas.Where(Char.IsLetter).OrderBy(Char.ToLower).ToArray();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多