我有一个像这样的列表
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'设置为。
我可以得到一些帮助吗?
答案 0 :(得分:1)
您可以在找不到目标项目时跳过列表项目,然后抓住目标项目本身以及下一项目:
var twoItems = res.SkipWhile(item => item.Name != "fajr").Take(2).ToList();
如果twoItems
列表中只有两个项目,则您找到了fajr
,而且它不是列表中的最后一项。如果您的项目少于两个,则fajr
不在那里,或者它是列表中的最后一项。
检查您是否有两个项目,并根据需要设置字段:
if (twoItems.Count == 2) {
twoItems[0].EndTime = twoItems[1].SalahTime;
}
答案 1 :(得分:1)
这样的事情应该这样做:
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;
}
);
答案 2 :(得分:0)
for(int i = 1; i < res.Count; i++)
{
// Todo: Check for null references by your own way.
res[i - 1].endTime = res[i].salahTime;
}
答案 3 :(得分:0)
您可以将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;
答案 4 :(得分:0)
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;
});;
答案 5 :(得分:0)
您可以使用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。