好吧所以我真的不知道怎么说这个问题,但我尽了最大努力。我想要实现的目标是使用foreach循环遍历类别。在foreach循环类别中,另一个foreach循环将通过Numbers。现在它正在抓取表中的任何值并将它们存储到数组中。我的目标是只将每个类别中最高的数字存储到数组中。
以下是表格的外观:
Category Table
Title NumberId
Type 1
Priority 2
Likelihood 3
Numbers Table
Order NumberId
3 1
2 1
1 1
3 2
2 2
1 2
3 3
2 3
1 3
所以我的目标不是将每个订单值存储到数组中。我想根据每个数字ID存储最高的数字。所以数组将包含3,3,3。
这就是我将每个数字存储到数组中的原因:
int[] values = new int[count];
foreach(var x in Category)
{
foreach(var w in x.Numbers)
{
values[y] = w.Order;
y++;
}
}
解决方案:
int[] values = new int[count];
foreach(var x in Category)
{
foreach(var w in x.Numbers)
{
values[y] = x.Numbers.Select(o => o.Order).Max();
y++;
break;
}
}
答案 0 :(得分:1)
这可以通过LINQ相对轻松地完成:
int[] values = new int[count];
foreach(var x in Category)
{
values.[y] = x.Numbers.OrderBy(w => w.Order).Reverse().First();
y++;
}
按顺序对x.Numbers进行排序,反转顺序(在顺序中放置最高值),然后选择第一个值。
使用此方法确保您实际获得了x.Number的值,否则您将获得.First()调用抛出的异常。
如果您无法使用LINQ(例如,如果您使用的是.NET 2.0),请考虑使用以类别为键的词典,并使用最高的数字作为值:
Dictionary<int, int> categoriesByHighestOrders = new Dictionary<int, int>();
foreach(var x in Category)
{
if (!categoriesByHighestOrders.Keys.Contains[x.SomeIndetifier])
categoriesByHighestOrders.Add(x.SomeIdentifier, 0);
foreach(var w in x.Numbers)
{
if (categoriesByHighestOrders[x.SomeIndetifier] < w.Order
categoriesByHighestOrders[x.SomeIndetifier] = w.Order;
}
}
答案 1 :(得分:1)
您可以使用IEnumerable.Max()
:
foreach(var x in Category)
{
values[y] = x.Numbers.Select(o => o.Order).Max();
y++;
}