通过这些字符串的一部分对字符串数组进行排序

时间:2016-04-13 10:36:09

标签: c# sorting

我试图用行中的第四个字符串对xls行进行排序。

string[] list_lines = System.IO.File.ReadAllLines(@"E:\VS\WriteLines.xls");



        // Display the file contents by using a foreach loop.
        System.Console.WriteLine("Contents of Your Database = ");

        foreach (var line in list_lines)
        {

            // Use a tab to indent each line of the file.
            Console.WriteLine("\t" + line);
        }

我在创建算法时遇到问题,该算法将识别每行的第四个元素并按字母顺序列出内容。 每行中的单词用''。

分隔

有人可以把我放在正确的方向吗?

EDIT -------------------------- 好的,

foreach (var line in list_lines.OrderBy(line => line.Split(' ')[3]))

排序问题。线条按我的需要排序。 Excel用';'更改''空格。这就是编译时出错的原因。

现在,我想,我需要将字符串的每个部分解析为int,因为它按第一个数字而不是数字排序。

2 个答案:

答案 0 :(得分:1)

您可以拆分行,然后使用OrderBy中的第三项:

foreach (var line in list_lines.OrderBy(line => line.Split(' ')[3]))
{
}

答案 1 :(得分:1)

好吧,只需排序数组:

string[] list_lines = ...;

// General case: not all strings have 4 parts
Array.Sort(list_lines, (left, right) => {
  String[] partsLeft = left.Split(' ');
  String[] partsRight = right.Split(' ');

  if (partsLeft.Length < 4)
    if (partsRight.Length < 4)
      return String.Compare(left, right, StringComparison.OrdinalIgnoreCase) 
    else 
      return -1;
  else if (partsRight.Length < 4)
    return 1; 

  return String.Compare(partsLeft[3], partsRight[3], StringComparison.OrdinalIgnoreCase);
});

如果所有保证的行至少有4个项目,那么它可以简化为

Array.Sort(list_lines, (left, right) => 
  String.Compare(left.Split(' ')[3],
                 right.Split(' ')[3],
                 StringComparison.OrdinalIgnoreCase));