DOBON.NETプログラミング道掲示板

No34028 の記事


■34028 / )  Re[3]: 文字列構造体のListのソート
□投稿者/ 魔界の仮面弁士 大御所(1163回)-(2018/11/13(Tue) 15:35:11)
  • アイコン# 引用は適切に。全文引用は避けましょう。

    No34027に返信(あおぞらさんの記事)
    >>> public List<Items> itemaList = new List<Items>();
    > 文字列で格納してありますが、数値として、(〇1>2>3・・・×1>12>2)ソートしたいのでInt.Parseを使っています。
    itemaList ではなく itemList
    Int.Parse ではなく int.Parse ですね。

    数値扱いしたいのなら、Items クラスに
     public int Order { get { return int.Parse(oder); } }
    を付与しておくという手もありますね。

    しかし oder に関して言えば、"0", "1"〜"9" しかないなら、
    int にする必要は無いようにも思えます。


    > oderが0の場合は検索結果に含めない
    それは
     itemList.Where(o => o.oder != "0")
    で良いかと。


    > oder順で並べるときは20レコードのうち9レコードしか使わないので、
    oder の値が "1"〜"9" のものは同時には存在せず、
    残り 11 レコードの oder は、すべて "0" ということですね。
    (もしかしたら、20 レコードすべてが "0" の可能性もあるかもしれませんが)

    もし、oder の値が競合することがあり、その場合は List<> 順を維持したいなら、

     var r1 = itemList.Where(o => o.oder != "0")
      .Select((item, index) => new { item, index })
      .OrderBy(o => o.item.oder).ThenBy(o => o.index)
      .Select(o => o.item);

    などと記述することが出来ます。


    > orderby int.Parse(num.oder) を追加したのですが、
    oder が競合しない "1"〜"9" ということなので、int.Parse も不要で

    var q = from o in itemList where o.oder != "0" orderby o.oder select o;

    かな。
違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -