获取下一个项目,并更新当前的一个
我有这样获取下一个项目,并更新当前的一个
List<NamazTimesModel> res = nt.Select();
名单在RES我有这样
[
{
"name": "fajr",
"salahTime": "05:23",
"namazTime": "05:23",
"date": "3/6/2017 12:00:00 AM",
"endTime": null
},
{
"name": "sunrise",
"salahTime": "07:01",
"namazTime": "07:01",
"date": "3/6/2017 12:00:00 AM",
"endTime": null
},
{
"name": "zuhr",
"salahTime": "12:33",
"namazTime": "12:33",
"date": "3/6/2017 12:00:00 AM",
"endTime": null
},
....
]
数据我遍历列表,并检查什么是当前项目。例如,它是'fajr',那么我必须采取下一个项目,并从那里获得'salahTime',并将fajr的'endTime'设置为那个。
我可以得到一些帮助吗?
像这样的东西应该这样做:
var res = nt.Aggregate(new List<NamazTimesModel>(), (t, i) =>
{
if (t.Count > 0)
{
t[t.Count - 1].endTime = i.salahTime;
}
t.Add(i);
return t;
}
);
真棒,感谢队友。 :) – mohsinali1317
您可以跳过列表中的项目,而你的目标找不到项目,然后抓住目标项目本身,与下一个沿:
var twoItems = res.SkipWhile(item => item.Name != "fajr").Take(2).ToList();
如果您有twoItems
清单正好有两个项目,然后你发现fajr
,它不是列表中的最后一项。如果您的项目少于两个,则fajr
不在此处,或者它是列表中的最后一个项目。
检查你有两个项目,并设置字段必要的:
if (twoItems.Count == 2) {
twoItems[0].EndTime = twoItems[1].SalahTime;
}
for(int i = 1; i < res.Count; i++)
{
// Todo: Check for null references by your own way.
res[i - 1].endTime = res[i].salahTime;
}
您可以设置如下Namaz倍,
for(var i = 0; i<nts.Count()-1; i++){
nt[i].EndTime = nt[i+1].SalahTime
}
然后不要忘记设置最后Namaz时间:
nts[nt.Count()-1] = nts[0].SalahTime;
res.ForEach(item =>
{
int index = res.FindIndex(m => m.name == item.name);
item.endTime = index+1 != res.Count ? res.ElementAt(index + 1).salahTime : res.FirstOrDefault().salahTime;
});;
你可以做两次迭代与LINQ查询。
这将是这样的:
string[] numbers= {"one","two","last"}; string[] variables={"string one","int two","string three"}; var res = variables.Where(v => numbers.Any(n => v.Contains(n ))); res.ToList().ForEach(d => Console.WriteLine(d));
工作代码here。
可能重复的[LINQ列表中的下一项](http://*.com/questions/2680228/linq-next-item-in-list) – NineBerry
关心包括你是如何循环通过列表? –
@NineBerry我想OP比他的标题要略多一点:除了下一个,他还需要当前的项目,以便他可以修改它的属性。 – dasblinkenlight