C# 按字符串的一部分对字符串数组进行排序
我正在尝试按行中的第四个字符串对xls行进行排序C# 按字符串的一部分对字符串数组进行排序,c#,sorting,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 (
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);
}
我在创建识别每行第四个元素并按字母顺序列出内容的算法时遇到问题。
每行中的单词用“”分隔
有人能给我指出正确的方向吗
编辑--------------------------
嗯
解决了这个问题。行按我的需要排序。Excel将“”空格更改为“;”。这就是为什么编译时会出现错误
现在,我想,我需要将字符串的每一部分解析为int,因为它是按第一位数字而不是数字排序的。您可以拆分行,然后在
OrderBy中使用第三项:
foreach (var line in list_lines.OrderBy(line => line.Split(' ')[3]))
{
}
那么,只需对数组进行排序:
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);
});
谢谢你的建议。您的代码不会导致错误,但在编译时,我会遇到奇怪的错误,代码不起作用。然后不是每一行都有第四项。确实如此,文件中有5列。都由数字填充。当字符串没有第四项时,如@Patrick Hofman的答案所示,你想做什么?这很奇怪。我确信xls文件填充在5列中,它们可能被另一个符号而不是空格分隔。调试时你检查过线路了吗?Draken,你说得对。excel似乎把“;”放在在空白处。行按我需要的任何列排序。非常感谢。
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);
});
Array.Sort(list_lines, (left, right) =>
String.Compare(left.Split(' ')[3],
right.Split(' ')[3],
StringComparison.OrdinalIgnoreCase));