我确定不是第一个发生这种情况的人,但是我还是从多个角度尝试解决此问题,并且我遇到了同样的问题
我正在从数据库中检索项目,我只希望每个位置的最后一个项目。
class Item {
public bool is_scheduled {get;set;}
public int round{get;set;}
public int round_position {get;set;}
[NotMapped]
public int position {get;set;}
public int ItemsRequired{get;set;}
}
如果ItemsRequired大于1,那么我需要将同一项目的副本添加到列表中。
在ive创建副本之后,我然后尝试重新编号该项目,看来工作正常。
当我整体检查列表时,虽然有重复的数字。
using (var context = new DBContext)
{
var items = context.Items
.Where(o => o.round == round && o.is_scheduled == false)
.GroupBy(o => o.round_position)
.ToList()
.Select(GetLastItem)
.ToList();
foreach (var item in items)
{
Trace.WriteLine($"{item.position}");
}
return ParseItems(items);
}
private static List<Item> ParseItems(List<Item> items)
{
var result = new List<Item>();
var idx = 0;
foreach (var item in items)
{
var carries = item.ItemsRequired.GetValueOrDefault();
if (carries == 1)
{
idx = idx + 1;
item.position = idx;
Trace.WriteLine($"pos:{item.position}");
result.Add(item);
}
else
{
for (var i = 0; i < carries; i++)
{
idx = idx + 1;
item.position = idx;
Trace.WriteLine($"pos:{item.position}");
result.Add(item);
}
}
}
foreach (var r in result)
Trace.WriteLine(r.position);
return result;
}
private static Item GetLastItem(IGrouping<int?, Item> arg)
{
var items = arg
.OrderBy(o => o.date_created)
.ToList();
var last = items.Last();
return last;
}
所以,如果我要拿走物品并指定一个位置,那么
items = items.Select((item,idx)=>{
var clone = item;
clone.position=idx;
return clone;}).ToList();
// Print items
foreach(var item in items)
Trace.WriteLine(item.position);
当前在输出窗口中显示数字的重复项。
答案 0 :(得分:1)
内部的for循环实际上将一次又一次地更新同一项目,因为它是引用类型。相反,您将需要在Item
上创建一个新实例。
...
else
{
for (var i = 0; i<carries; i++)
{
idx = idx + 1;
var itemClone = new Item();
itemClone.position = idx
itemClone.is_scheduled = item.is_scheduled;
//...set other itemClone property values
Trace.WriteLine($"pos:{itemClone.position}");
result.Add(itemClone);
}
}
...
答案 1 :(得分:0)
一个组创建一个二维数组。长项(键)是组,短项是长数组中的每个项。因此,您需要使用select枚举键,并获取每个键的最后一项。尝试以下操作:
using(var context = new DBContext){
.Where(o => o.round == round && o.is_scheduled == false)
.GroupBy(o=>o.round_position)
.Select(x => x.LastOrDefault())
.ToList();
}
答案 2 :(得分:0)
i1 = -2:0;
i2 = 0:pi/2;
i3 = pi/2:pi;
f1 = sinh(i1)+2;
f2 = sin(i2)-2;
f3= 2*i3.^2-2*pi*i3+3;
plot([i1 i2 i3],[f1,f2,f3]);
答案 3 :(得分:0)
我自己找到了答案,但是我真的可以使用帮助来了解原因。
如果我服用
{
"plugins": ["transform-regenerator"]
}