我有很多标头/职位项目。我尝试按标题的属性对位置进行分组。
标题是分组条件,因此我对标题进行排序以获取特定兴趣的职位。特定的利益由OR条件限定。 为了按兴趣提取头寸,我遍历标题列表。 我正在寻找一种按特定兴趣对头寸进行排序的方法,而不是遍历标题页的标题列表。
在该示例中,仅描述了一种特定的兴趣,即调用ExampleFunction()。
class Header
{
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
public int D { get; set; }
public IEnumerable<Position> Positions { get; set; }
public Header(int a, int b, int c, int d) { A = a; B = b; C = c; D = d; }
}
class Position
{
public int P1 { get; set; }
public int P2 { get; set; }
public Position(int p1, int p2) { P1 = p1; P2 = p2; }
}
class Program
{
static void Main(string[] args)
{
var itemList = new List<Header>()
{
new Header(1,1,1,0) {Positions = new List<Position>() {new Position(3,5) } },
new Header(1,1,1,1) {Positions = new List<Position>() {new Position(1,2) } },
new Header(1,2,2,0) {Positions = new List<Position>() {new Position(8,7) } },
new Header(1,2,3,0) {Positions = new List<Position>() {new Position(0,1) } },
new Header(2,2,2,2) {Positions = new List<Position>() {new Position(1,0) } },
new Header(3,2,2,1) {Positions = new List<Position>() {new Position(10,5) } },
new Header(1,0,0,0) {Positions = new List<Position>() {new Position(11,5) } },
new Header(1,0,2,0) {Positions = new List<Position>() {new Position(3,5) } },
};
var orderedItemList = itemList.OrderBy(i => i.A)
.ThenBy(i => i.B)
.ToList();
Header oldItem = null;
var positions = new List<Position>();
foreach(var item in orderedItemList)
{
if (oldItem == null)
{
oldItem = item;
continue;
}
else if (item.A != oldItem.A || item.B != oldItem.B)
{
ExampleFunction(positions);
positions.Clear();
}
oldItem = item;
positions.AddRange(item.Positions);
}
Console.ReadLine();
}
static void ExampleFunction(IEnumerable<Position> positions)
{
// Do something with the positions
}
}
答案 0 :(得分:3)
不清楚,您想做什么。但是我有一些想法。
您可以使用ObservableCollection类型。它具有事件CollectionChanges。它可以帮助您检测是否已添加,删除或重置列表。
此外,您可以在您的课程上实现INotifyPropertyChanged接口,并确定Item中已更改的属性。