4

linqでmyScriptCellsCount.MyCellsCharactersCount(リストint型)をソートするにはどうすればよいですか

    public class MyExcelSheetsCells
    {
        public List<int> MyCellsCharactersCount { get; set; }

        public MyExcelSheetsCells()
        {
            MyCellsCharactersCount = new List<int>();
        }

    }
   void ArrangedDataList(DataTable dTable)
        {
            DAL.MyExcelSheets myexcelSheet = new DAL.MyExcelSheets();
            myScriptCellsCount = new TestExceltoSql.DAL.MyExcelSheetsCells();

            foreach (DataColumn col in dTable.Columns)
                myexcelSheet.MyColumnNames.Add(col.ColumnName.ToString());
            foreach(DataColumn dc in dTable.Columns)
            foreach (DataRow  dr in dTable.Rows)
                myScriptCellsCount.MyCellsCharactersCount.Add(dr[dc].ToString().Length);
          //How can i sort desc
            //myScriptCellsCount.MyCellsCharactersCount = from list in myScriptCellsCount.MyCellsCharactersCount
            //                                            orderby list.CompareTo( descending
            //                                            select list;
            CreatSqlTable(myexcelSheet.MyColumnNames, dTable.TableName, myScriptCellsCount.MyCellsCharactersCount[0].ToString());
            myscript.WriteScript(myscript.SqlScripts);
        }
4

5 に答える 5

9

OrderByまたはSortを使用できますが、理解しておく必要のある2つの違いがあります。

並べ替えを行うと、リストが「インプレース」で並べ替えられるため、この例では、変数「list」が並べ替えられます。


// you can manipulate whether you return 1 or -1 to do ascending/descending sorts
list.Sort((x, y) =>
{
   if (x > y) return 1;
   else if (x == y) return 0;
   else return -1;
});

OrderByを実行すると、元のリストは影響を受けませんが、並べ替えられた新しい列挙可能なものが返されます。

var sorted = list.OrderByDescending(x => x)

編集

この回答は最近賛成されたので、レビューしました。私の元の応答では、私は本当に重要な詳細を省略しました:

上記のLINQコード(2番目の例)を使用する場合、変数「sorted」を反復処理するたびにソートが発生します。したがって、1つ以上のforeachにある場合は、並べ替えを繰り返します。これを回避するには、上記のコードを次のように変更します。

var sorted = list.OrderByDescending(x => x).ToList(); // or .ToArray()

これにより、列挙子が強制的に実行され、結果が並べ替えられて保存されます。

列挙するのが1回だけの場合は、ToList/ToArray呼び出しを省略できます。

于 2010-06-17T14:24:38.260 に答える
9
// using Linq
MyCellsCharactersCount.OrderBy(x => x);            // ascending
MyCellsCharactersCount.OrderByDescending(x => x);  // descending

また

// not using Linq
MyCellsCharactersCount.Sort();                     // ascending
MyCellsCharactersCount.Sort().Reverse();           // descending
于 2010-06-17T14:12:11.827 に答える
1

リストで OrderBy メソッドを使用できるはずです。

IEnumerable sortedList = myScriptCellsCount.MyCellsCharactersCount.OrderBy(anInt => anInt);
于 2010-06-17T14:13:55.710 に答える
0
var sorted = from i in MyCellsCharacterCount orderby i descending select i;
于 2012-08-08T10:02:15.210 に答える
0

この回答を見てください。リストの typeOf を取得することで、「プロセス」をオブジェクトに置き換えることができます。

乾杯

于 2012-10-16T17:56:00.337 に答える