C# 字符串的多级排序
以下是我的原始数据:C# 字符串的多级排序,c#,string,sorting,C#,String,Sorting,以下是我的原始数据: Sana Paden,1098,64228,46285,2/15/2011 Ardelle Mahr,1242,85663,33218,3/25/2011 Joel Fountain,1335,10951,50866,5/2/2011 Ashely Vierra,1349,5379,87475,6/9/2011 Amado Loiacono,1406,62789,38490,7/17/2011 Joycelyn Dolezal,1653,14720,13638,8/24/2
Sana Paden,1098,64228,46285,2/15/2011
Ardelle Mahr,1242,85663,33218,3/25/2011
Joel Fountain,1335,10951,50866,5/2/2011
Ashely Vierra,1349,5379,87475,6/9/2011
Amado Loiacono,1406,62789,38490,7/17/2011
Joycelyn Dolezal,1653,14720,13638,8/24/2011
Alyse Braunstein,1657,69455,52871,10/1/2011
Cheri Ravenscroft,1734,55431,58460,11/8/2011
我使用了一个带有嵌套Streamwriter的Filestream来确定文件中有多少行,2创建一个长数组,让我知道文件中每一行的开头。代码和输出如下:
using (FileStream fs = new FileStream(@"C:\SourceDatatoedit.csv", FileMode.Open, FileAccess.Read))
{
fs.Seek(offset, SeekOrigin.Begin);
StreamReader sr = new StreamReader(fs);
{
while (!sr.EndOfStream && fs.CanRead)
{
streamsample = sr.ReadLine();
numoflines++;
}// end while block
}//end stream sr block
long[] dataArray = new long[numoflines];
fs.Seek(offset, SeekOrigin.Begin);
StreamReader dr = new StreamReader(fs);
{
numoflines = 0;
streamsample = "";
while (!dr.EndOfStream && fs.CanRead)
{
streamsample = dr.ReadLine();
//pointers.Add(numoflines.ToString());
dataArray[numoflines] = offset;
offset += streamsample.Length - 1;
numoflines++;
}// end while
一个字符串包含名称、ID、贷款金额、付款金额和付款日期。
我有一个适当的方法返回剩余金额,方法是从贷款金额中减去付款金额,然后除以100,得到美元和美分的价值
完成此操作后,我想按日期、姓名排序信息,最后先按负数排序。我知道我可以创建一个loan类,然后创建一个loan对象列表,并对集合运行Linq for objects查询,以获得此结果,但我尝试在不使用Linq的情况下执行此操作……有什么建议吗 根据代码的上下文,通过引入自定义类/业务对象,您可以获得许多好处。它将帮助您在代码中提供良好的关注点分离,从而转向更易于管理和测试的代码。您可以实现该接口,以便对类型列表集合调用自定义排序。我知道您提到不要使用LINQ。但是,您可以在此处使用一行代码:
using (FileStream fs = new FileStream(@"C:\SourceDatatoedit.csv", FileMode.Open, FileAccess.Read))
{
fs.Seek(offset, SeekOrigin.Begin);
StreamReader sr = new StreamReader(fs);
{
while (!sr.EndOfStream && fs.CanRead)
{
streamsample = sr.ReadLine();
numoflines++;
}// end while block
}//end stream sr block
}
这一行代码如下所示:
int numoflines = File.ReadLines("SourceDatatoedit.csv").
Select(line => line.Split(',')).ToList().Count;
或者你甚至可以得到列表
,比如:
var lines = File.ReadLines("SourceDatatoedit.csv").
Select(line => line.Split(',')).ToList();
然后得到后面的行数
numoflines = lines.Count;
然后继续使用您喜欢的代码:
long[] dataArray = new long[numoflines];
fs.Seek(offset, SeekOrigin.Begin);
StreamReader dr = new StreamReader(fs);
{
numoflines = 0;
streamsample = "";
while (!dr.EndOfStream && fs.CanRead)
{
streamsample = dr.ReadLine();
//pointers.Add(numoflines.ToString());
dataArray[numoflines] = offset;
offset += streamsample.Length - 1;
numoflines++;
}// end while
或者只需使用上面获得的
列表
,并像上面@sfuqua建议的那样创建一个IComparable实现一样使用它。我会为其道具类型创建一个类。一旦您将其填充到该类中,它将更易于使用。如果你愿意的话,我可以给你一个样本。用2d数组回答怎么样?