获取下一个项目,并更新当前的一个

问题描述:

我有这样获取下一个项目,并更新当前的一个

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

可能重复的[LINQ列表中的下一项](http://*.com/questions/2680228/linq-next-item-in-list) – NineBerry

+0

关心包括你是如何循环通过列表? –

+1

@NineBerry我想OP比他的标题要略多一点:除了下一个,他还需要当前的项目,以便他可以修改它的属性。 – dasblinkenlight

像这样的东西应该这样做:

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; 
      } 
     ); 
+0

真棒,感谢队友。 :) – 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