例如:
目录D:\Test下有很多文件
类似 Hello1.jpg Hello2.png, Hello3.bmp ... Hello20.psd .. Test1.c ... Test30.cpp
通常我们读取目录下文件列表后,得到文件名排序是按照下列方式:
Hello3.xxx
Hello4.xxx
Hello5.xxx
Hello6.xxx
Hello7.xxx
Hello8.xxx
Hello9.xxx
Hello1.xxx
Hello10.xxx
Hello2.xxx
Hello20.xxx
Hello21.xxx即不是按照我们预想的那种按照末尾数字大小来排序的方式:
Hello1.xxx
Hello2.xxx
Hello3.xxx
Hello4.xxx
Hello5.xxx
Hello6.xxx
Hello7.xxx
Hello8.xxx
Hello9.xxx
Hello10.xxx
Hello20.xxx
Hello21.xxx下面要求写出一个方法,实现输入第一种排序方式的字符串数组输出第二种方式的结果,扩展名xxx表示任意。public static string[] SortFileName(string[] input)
{
// TODO:你的实现
}
目录D:\Test下有很多文件
类似 Hello1.jpg Hello2.png, Hello3.bmp ... Hello20.psd .. Test1.c ... Test30.cpp
通常我们读取目录下文件列表后,得到文件名排序是按照下列方式:
Hello3.xxx
Hello4.xxx
Hello5.xxx
Hello6.xxx
Hello7.xxx
Hello8.xxx
Hello9.xxx
Hello1.xxx
Hello10.xxx
Hello2.xxx
Hello20.xxx
Hello21.xxx即不是按照我们预想的那种按照末尾数字大小来排序的方式:
Hello1.xxx
Hello2.xxx
Hello3.xxx
Hello4.xxx
Hello5.xxx
Hello6.xxx
Hello7.xxx
Hello8.xxx
Hello9.xxx
Hello10.xxx
Hello20.xxx
Hello21.xxx下面要求写出一个方法,实现输入第一种排序方式的字符串数组输出第二种方式的结果,扩展名xxx表示任意。public static string[] SortFileName(string[] input)
{
// TODO:你的实现
}
解决方案 »
- 如何突破WebClient长度限制
- winform中获取网页input value值问题
- fileupload上传图片
- 修改注册表,允许从网络运行程序
- error on line 1 at column 2: StartTag: invalid element name
- 如何取得网关,DNS,代理服务器等信息?
- 以下的代码中的方括号是什么意思呢?像这样 [DefaultProperty("SelectCommand")],看不懂。
- 本人根据自己的实践及参考资料整理了C#编程规范,与大家分享
- c#如何创建ssis(dts)包
- 数据库连接问题,请多多指教!!!
- 在继承来的toolStrip控件中如何添加新的toolStripButton?
- 网站保存用户的问题
有可能是
a1.jpg
a2.jpg
a10.jpg
b3.bmp
b4.png
b10.jpg
using System.Text.RegularExpressions;class Program
{
public static string[] SortFileName(string[] input)
{
Regex r = new Regex(@"[0-9]+(?=\.[^.]+$)");
decimal[] key = new decimal[input.Length];
for (int i = 0; i < key.Length; i++)
{
key[i] = decimal.Parse(r.Match(input[i]).Value);
}
Array.Sort(key, input);
return input;
} static void Main()
{
string[] a = { "Hello3.xxx", "Hello4.xxx", "Hello9.xxx", "Hello1.xxx",
"Hello10.xxx", "Hello2.xxx", "Hello20.xxx", "Hello21.xxx", "Hello100.xxx", };
string[] b = SortFileName(a);
foreach (string s in b)
{
Console.WriteLine(s);
}
}
}
/* 程序输出:
Hello1.xxx
Hello2.xxx
Hello3.xxx
Hello4.xxx
Hello9.xxx
Hello10.xxx
Hello20.xxx
Hello21.xxx
Hello100.xxx
*/
using System.Text.RegularExpressions;class Program
{
public static string[] SortFileName(string[] input)
{
Regex r = new Regex(@"^([^.0-9]*)([0-9]*)\.[^.]+$");
string[] key = new string[input.Length];
for (int i = 0; i < key.Length; i++)
{
Match m = r.Match(input[i]);
key[i] = string.Format("{0}{1:d8}", m.Groups[1].Value, int.Parse(m.Groups[2].Value));
}
Array.Sort(key, input);
return input;
} static void Main()
{
string[] a = { "a1.jpg", "a10.jpg", "b10.jpg", "b4.png", "a2.jpg", "b3.bmp" };
string[] b = SortFileName(a);
foreach (string s in b)
{
Console.WriteLine(s);
}
}
}
/* 程序输出:
a1.jpg
a2.jpg
a10.jpg
b3.bmp
b4.png
b10.jpg
*/
using System;
using System.Text.RegularExpressions;class Program
{
public static string[] SortFileName(string[] input)
{
Regex r = new Regex(@"^([^.0-9]*)([0-9]*)\.[^.]+$");
string[] key = new string[input.Length];
for (int i = 0; i < key.Length; i++)
{
Match m = r.Match(input[i]);
key[i] = m.Groups[1].Value;
if (m.Groups[2].Length > 0)
key[i] += int.Parse(m.Groups[2].Value).ToString("d10");
}
Array.Sort(key, input);
return input;
} static void Main()
{
string[] a = { "B.jpg", "a10.jpg", "B10.jpg", "100.png", "A2.jpg", "b3.bmp" };
string[] b = SortFileName(a);
foreach (string s in b)
{
Console.WriteLine(s);
}
}
}
/* 程序输出:
100.png
A2.jpg
a10.jpg
B.jpg
b3.bmp
B10.jpg
*/
{
Regex r = new Regex(@"(\D*)(\d*)");
string[] key = new string[input.Length];
for (int i = 0; i < key.Length; i++)
{
Match m = r.Match(Path.GetFileNameWithoutExtension(input[i]));
key[i] = m.Groups[1].Value + m.Groups[2].Value.PadLeft(64);
}
Array.Sort(key, input);
return input;
}
{
Array.Sort(input, new Comparison<string>((s1, s2) =>
{
string ext1 = Path.GetExtension(s1);
string ext2 = Path.GetExtension(s2);
if (ext1 != ext2)
return ext1.CompareTo(ext2);
string file1 = Path.GetFileNameWithoutExtension(s1);
string file2 = Path.GetFileNameWithoutExtension(s2);
Match m1 = Regex.Match(file1, "\\d+");
Match m2 = Regex.Match(file2, "\\d+");
while (m1 != null && m2 != null && !string.IsNullOrEmpty(m1.Value) && !string.IsNullOrEmpty(m2.Value))
{
if (m1.Value != m2.Value)
return int.Parse(m1.Value).CompareTo(int.Parse(m2.Value));
m1 = m1.NextMatch();
m2 = m2.NextMatch();
}
return file1.CompareTo(file2);
}));
return input;
}