アイテムの配列があり、それらのプロパティの1つで並べ替えたいのですが。 "item.Fields [" FieldName "]。Value"を使用してitemsプロパティにアクセスできます。プロパティは文字列として返されますが、intにキャストできます。
OrderBy <>を確認しましたが、その使用方法がわかりません。
明確にするために、OrderBy
は配列を所定の位置にソートしません-配列のソートされた新しいシーケンスcopyを返します。それが問題なければ、何かのようにします:
_var sorted = array.OrderBy(item => item.Fields["FieldName"].Value);
_
一方、プロパティが文字列として返されるが、intにキャストできるというコメントを理解できません。文字列をintにキャストすることはできません。解析する必要があります。それがあなたの意図したことなら、あなたはおそらく以下を望みます:
_var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));
_
それを配列として必要な場合は、後でToArray()
を呼び出すことができます。
_var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value))
.ToArray();
_
別の方法として、インプレースでソートする場合は_Array.Sort
_を使用できますが、多少面倒になります。
Sortメソッドを使用して配列をソートします。
Array.Sort(theArray, (a, b) => String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value));
C#3を使用していない場合は、ラムダ式の代わりにデリゲートを使用します。
Array.Sort(theArray, delegate(Item a, Item b) { return String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value); } );
(これは、OrderBy拡張機能が機能しないフレームワーク2でも機能します。)
Orderbyを使用できる場合は簡単ですが、以下を試してください。 int.Parseを投入しましたが、実際のソート方法によっては、これが不要になる場合があります。
var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));
var sortedArray = items.OrderBy(i => i.property).ToArray();
配列が必要ない場合は、それをオフにしておくことができます。その場合は、item型のIEnumerable <>になります。
それは言及する価値があります List<T>.Sort
はクイックソートに基づいており、ほとんどの場合、安定したソートではありません。
この実装は不安定なソートを実行します。つまり、2つの要素が等しい場合、それらの順序は保持されない可能性があります。対照的に、安定したソートでは、等しい要素の順序が保持されます。
ただし、 Enumberable.OrderBy
安定したソートを実行します。
このメソッドは安定したソートを実行します。つまり、2つの要素のキーが等しい場合、要素の順序は保持されます。対照的に、不安定なソートでは、同じキーを持つ要素の順序は保持されません。