按foreach循环中的数字顺序排序

时间:2017-04-20 19:39:33

标签: c#

所以我正在制作一个程序,它给我一个列表,但列表不合适。我需要列出像......一样的顺序。

1.txt
2.txt
3.txt

然而,它的出现就像

2.txt
1.txt
3.txt

全部按随机顺序排列。我正在使用的是

foreach (var file in d.GetFiles("*.txt"))
{                 
tosend = tosend + file.Name + "\n";
}

先谢谢洛根! 更新: 我不想要一根绳子。获得文件名后,它将设置其他文件的readtext并添加它。就像[1.txt] Text

一样

4 个答案:

答案 0 :(得分:4)

使用LINQ

foreach (var file in d.GetFiles("*.txt").OrderBy(x => x.Name).ToList())
{
    ...
}

修改 如果文件将为number.txt,则可以使用

foreach (var file in d.GetFiles("*.txt").OrderBy(x => int.Parse(x.Name.Substring(0,x.Name.IndexOf(".txt"))).ToList())
{
    ...
}

您需要添加一些错误检查

答案 1 :(得分:1)

或者您可以对数组进行排序:

string[] files = d.GetFiles("*.txt")
Array.Sort(files, StringComparer.InvariantCulture);
foreach (var file in files)
{                 
   tosend = tosend + file.Name + "\n";
}

答案 2 :(得分:0)

使用Linq

// top of code file
using System.Linq;

方法:

var files = d.GetFiles("*.txt").OrderBy(file => file.Name).ToList();

或根据您的示例作为字符串

string tosend = string.Join("\n", d.GetFiles("*.txt")
         .Select(file => file.Name)
         .OrderBy(x => x));

这使用\n作为分隔符加入返回的有序文件名列表。

答案 3 :(得分:0)

如果您正在寻找自然分类

  1.txt
  9.txt
 10.txt 

您可以使用 Interop 作为快速(可能是脏的)解决方案(有关详细信息,请参阅Natural Sort Order in C#

using System.Runtime.InteropServices;

...

[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string left, string right);

...

// Obtain files
var files = d.GetFiles();

// Sort files in natural order
Array.Sort(files, (left, right) => StrCmpLogicalW(left.Name, right.Name));

// combine files' names into the string
string tosend = string.Join("\n", files);