考虑List中具有int属性Order的A类的4个实例(最多100个)。
a0.Order is 0
a1.Order is 1
a2.Order is 2
a3.Order is 3
Run Code Online (Sandbox Code Playgroud)
现在,需要更改Order属性,以便将a0插入a3之前(或在列表中的任何索引处-可以在开始,结束或中间)。
结果应该是这样的:
a0.Order is 2
a1.Order is 0
a2.Order is 1
a3.Order is 3
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个列表,列表的实际物理顺序并不重要,仅更改属性即可。
项目的数量不只是在更改“订单”。
最简单的方法是什么?
你可以这样做:
void MoveAndUpdateOrder(List<A> list, A item, int positionToInsert)
{
// Order elements
var ordered_list = list.OrderBy(a => a.Order).ToList();
// Remove and insert at the proper position
ordered_list.Remove(item);
ordered_list.Insert(positionToInsert, item);
// Update the Order properties according to it's current index
for ( int i = 0; i < ordered_list.Count; i++ )
ordered_list[i].Order = i;
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
var a0 = new A { Order = 0 };
var a1 = new A { Order = 1 };
var a2 = new A { Order = 2 };
var a3 = new A { Order = 3 };
var list = new List<A>
{
a0, a1, a2, a3
};
MoveAndUpdateOrder( list, a0, 2 );
Run Code Online (Sandbox Code Playgroud)
Order属性不应为整数,而应为十进制。您可以轻松更改值,然后按其排序以任意顺序检索项目。新值是前一个值和后一个值之间的中点。
PS然后,您只需要更改要重新定位的列表中项目的Order属性。
| 归档时间: |
|
| 查看次数: |
2735 次 |
| 最近记录: |