
C# 中一维数组按一定规则的排序
path路径下面有一堆xml文件,通过下面的GetFiles(stringpath)方法,返回一个文件列名的数组(如下):[0]{matr550_201203081758...
path路径下面有一堆xml文件,通过下面的GetFiles(string path) 方法,返回一个文件列名的数组(如下):
[0] {matr550_20120308175850.xml}
[1] {matr550_20120309152025.xml}
[2] {matr550_20120313152027.xml}
[3] {matr550_20120314141837.xml}
[4] {matr900_20120308175850.xml}
[5] {matr900_20120309152025.xml}
[6] {matr900_20120313152027.xml}
[7] {matr900_20120314141837.xml}
但是这个不是我想要的排列方式,我想要的排列方式是先mart900_开头的在前面,matr550_开头的在后面,即(如下)
[0] {matr900_20120308175850.xml}
[1] {matr900_20120309152025.xml}
[2] {matr900_20120313152027.xml}
[3] {matr900_20120314141837.xml}
[4] {matr550_20120308175850.xml}
[5] {matr550_20120309152025.xml}
[6] {matr550_20120313152027.xml}
[7] {matr550_20120314141837.xml}
或者,可以将这个数组拆分成两个数组,一个是matr550_的一个是matr900的,给位大侠们,给跪了。。。
--------------------------------------------------
namespace BQbrDataTransfer.Common
{
public class GetFileList
{
public FileInfo[ ] GetFiles(string path)
{
{
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[ ] files = di.GetFiles();
FileComparer fc = new FileComparer( );
Array.Sort(files, fc);
return files;
}
}
}
public class FileComparer : IComparer
{
int IComparer.Compare(Object o1, Object o2)
{
FileInfo fi1 = o1 as FileInfo;
FileInfo fi2 = o2 as FileInfo;
return fi1.CreationTime.CompareTo(fi2.CreationTime);
}
}
}
这个问题已经解决了,感谢回答者
思路和你的一样,将原来的数组拆分成两个数组
files = gfl.GetFiles(s_fileLocation);
files得到下面数组
[0] {matr550_20120308175850.xml}
[1] {matr550_20120309152025.xml}
[2] {matr550_20120313152027.xml}
[3] {matr550_20120314141837.xml}
[4] {matr900_20120308175850.xml}
[5] {matr900_20120309152025.xml}
[6] {matr900_20120313152027.xml}
[7] {matr900_20120314141837.xml}
然后建立2个ArrayList ,通过ffor循环往这两个新ArrayList 添加元素
ArrayList str_550 = new ArrayList();
ArrayList str_900 = new ArrayList();
for (int i = 0; i < files.Length; i++)
{ string s_FileName;
s_FileName = files[i].Name.ToString();
if (s_FileName.Contains("matr550")) str_550.Add(s_FileName);
if (s_FileName.Contains("matr900")) str_900.Add(s_FileName);
} 展开
[0] {matr550_20120308175850.xml}
[1] {matr550_20120309152025.xml}
[2] {matr550_20120313152027.xml}
[3] {matr550_20120314141837.xml}
[4] {matr900_20120308175850.xml}
[5] {matr900_20120309152025.xml}
[6] {matr900_20120313152027.xml}
[7] {matr900_20120314141837.xml}
但是这个不是我想要的排列方式,我想要的排列方式是先mart900_开头的在前面,matr550_开头的在后面,即(如下)
[0] {matr900_20120308175850.xml}
[1] {matr900_20120309152025.xml}
[2] {matr900_20120313152027.xml}
[3] {matr900_20120314141837.xml}
[4] {matr550_20120308175850.xml}
[5] {matr550_20120309152025.xml}
[6] {matr550_20120313152027.xml}
[7] {matr550_20120314141837.xml}
或者,可以将这个数组拆分成两个数组,一个是matr550_的一个是matr900的,给位大侠们,给跪了。。。
--------------------------------------------------
namespace BQbrDataTransfer.Common
{
public class GetFileList
{
public FileInfo[ ] GetFiles(string path)
{
{
DirectoryInfo di = new DirectoryInfo(path);
FileInfo[ ] files = di.GetFiles();
FileComparer fc = new FileComparer( );
Array.Sort(files, fc);
return files;
}
}
}
public class FileComparer : IComparer
{
int IComparer.Compare(Object o1, Object o2)
{
FileInfo fi1 = o1 as FileInfo;
FileInfo fi2 = o2 as FileInfo;
return fi1.CreationTime.CompareTo(fi2.CreationTime);
}
}
}
这个问题已经解决了,感谢回答者
思路和你的一样,将原来的数组拆分成两个数组
files = gfl.GetFiles(s_fileLocation);
files得到下面数组
[0] {matr550_20120308175850.xml}
[1] {matr550_20120309152025.xml}
[2] {matr550_20120313152027.xml}
[3] {matr550_20120314141837.xml}
[4] {matr900_20120308175850.xml}
[5] {matr900_20120309152025.xml}
[6] {matr900_20120313152027.xml}
[7] {matr900_20120314141837.xml}
然后建立2个ArrayList ,通过ffor循环往这两个新ArrayList 添加元素
ArrayList str_550 = new ArrayList();
ArrayList str_900 = new ArrayList();
for (int i = 0; i < files.Length; i++)
{ string s_FileName;
s_FileName = files[i].Name.ToString();
if (s_FileName.Contains("matr550")) str_550.Add(s_FileName);
if (s_FileName.Contains("matr900")) str_900.Add(s_FileName);
} 展开
展开全部
//思路:首先,将源数据筛选,并分别添加到两个list中;
// 然后,将两个list分别排序;
// 最后,将排序好的list,循环添加到字符串数组中
try
{
//源数据
string[] mxmlfiles = { "mart900_0102.xml", "matr550_01024.xml", "mart900_0101.xml", "matr550_01025.xml" };
//分别存mart900和matr550开头的数据
List<string> listmart900 = new List<string>();
List<string> listmatr550 = new List<string>();
for (int i = 0; i < mxmlfiles.Length; i++)
{
//注意mnewstring的值
string mnewstring = mxmlfiles[i].Substring(0, 7);
if (string.Equals("mart900", mnewstring, StringComparison.CurrentCultureIgnoreCase))
{
listmart900.Add(mxmlfiles[i]);
}
else if (string.Equals("matr550", mnewstring, StringComparison.CurrentCultureIgnoreCase))
{
listmatr550.Add(mxmlfiles[i]);
}
}
//两个list分别排序
listmart900.Sort();
listmatr550.Sort();
string[] resultmart900 = new string[listmart900.Count];
for (int i = 0; i < listmart900.Count; i++)
{
resultmart900[i] = listmart900[i];
}
//listmatr550的数据你自己处理一下,呵呵~~~
}
catch
{
}
// 然后,将两个list分别排序;
// 最后,将排序好的list,循环添加到字符串数组中
try
{
//源数据
string[] mxmlfiles = { "mart900_0102.xml", "matr550_01024.xml", "mart900_0101.xml", "matr550_01025.xml" };
//分别存mart900和matr550开头的数据
List<string> listmart900 = new List<string>();
List<string> listmatr550 = new List<string>();
for (int i = 0; i < mxmlfiles.Length; i++)
{
//注意mnewstring的值
string mnewstring = mxmlfiles[i].Substring(0, 7);
if (string.Equals("mart900", mnewstring, StringComparison.CurrentCultureIgnoreCase))
{
listmart900.Add(mxmlfiles[i]);
}
else if (string.Equals("matr550", mnewstring, StringComparison.CurrentCultureIgnoreCase))
{
listmatr550.Add(mxmlfiles[i]);
}
}
//两个list分别排序
listmart900.Sort();
listmatr550.Sort();
string[] resultmart900 = new string[listmart900.Count];
for (int i = 0; i < listmart900.Count; i++)
{
resultmart900[i] = listmart900[i];
}
//listmatr550的数据你自己处理一下,呵呵~~~
}
catch
{
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询