0

既に存在するこのコードを変更しようとしています。このコードは 2008 年頃に開発されたもので、並べ替えの問題を修正しようとしています。コードを変更することも考えていますが、最初に問題を修正したかったのです。

ArrayList lineEmpNrs = new ArrayList();
taMibMsftEmpDetails employeeDetails; //taMibMsftEmpDetails is a custom class file

while (!HeaderFile.EndOfStream) //headerfile is employee information text file.
{
    headerRow = HeaderFile.ReadLine();
    headerFields = headerRow.Split(',');
    employeeDetails = BuildLine(headerFields[1],headerFields[2],headerFields[3]);
    lineEmpNrs.Add(employeeDetails);
}

 private taMibMsftEmpDetails BuildLine(string EmpId, string EmpName, String ExpnsDate)
 {
     taMibMsftEmpDetails empSlNr = new taMibMsftEmpDetails();
     empSlNr.EmployeeId  = EmpId;
     empSlNr.EmployeeName   = EmpName;
     empSlNr.ExpenseDate = ExpnsDate;
     return empSlNr;
 }

Headerfile には、従業員の経費の詳細が含まれています。empID がここでのキーであり、headerFile には、同じ EmpID がファイル内でランダムな順序で表示される「n」行を含めることができます。

lineEmpNrs を使用して、EmpID に基づいて他の情報を作成します。したがって、EmpID に基づいて lineEmpNrs をソートしたいと考えています。通常の並べ替え方法を試しましたが、うまくいきませんでした。

提案してください。

4

6 に答える 6

2

以下で指摘されているように、これは ArrayList では機能しませんがlineEmpNrsList<taMibMsftEmpDetails>.

ここでLINQは完璧です。

var sortedList = lineEmpNrs.OrderBy(emp => emp.EmployeeId);

コメントを確認した後、これは、コードを .NET 2.0 から 3.5 以降に変更できる場合にのみ機能します。

于 2013-07-26T16:33:14.260 に答える
1

データを DataTable にロードし、DataView を介して並べ替えることもできます。

    DataTable dt = new DataTable();
    dt.Columns.Add("EmpID");
    dt.Columns.Add("Field2");
    dt.Columns.Add("Field3");

    // Read file, split values, add to table
    while (!HeaderFile.EndOfStream) {

        headerRow  = HeaderFile.ReadLine();
        headerFields = headerRow.Split(',');

        // Create row and add it to the table
        DataRow dr = dt.NewRow();
        dr["EmpID"] = headerFields[0];
        dr["Field1"] = headerFields[1];
        dr["Field2"] = headerFields[2];
        dt.ImportRow(dr);
    }

    // Sort table by EmpID
    DataView dv = dt.DefaultView;
    dv.Sort = "EmpID ASC";
    dt = dv.ToTable();
于 2013-07-26T16:52:21.363 に答える
1

通常の並べ替えメソッドは、次のようなカスタムの比較メソッドと一緒に機能する必要があります。

private class sortByEmployeeIdHelper: IComparer
{
   int IComparer.Compare(object a, object b)
   {
       taMibMsftEmpDetails employeeA = (taMibMsftEmpDetails)a;
       taMibMsftEmpDetails employeeB = (taMibMsftEmpDetails)b;

       //employee id is numeric?
       int id = int.Parse(employeeA.EmployeeId);
       return id.CompareTo(int.Parse(employeeB.EmployeeId));
   }
}

IComparer myComparer = new sortByEmployeeIdHelper();
lineEmpNrs.Sort(myComparer);
于 2013-07-26T18:09:12.810 に答える
1

ArrayList をリストとして使用できます

var enumerableCollection = from taMibMsftEmpDetails ln in lineEmpNrs
                                        orderby ln.EmployeeId
                                        select ln;

に変換Arrayまたは使用できます。List

于 2013-07-26T16:44:39.640 に答える