假设我有一个名为TheListOfMyObjects的对象列表。在该列表中,有一个对象,其属性与一个值相匹配:MyObject.TheProperty = SomeValue。
如何从该列表中获取前3个对象和下3个对象?
注意,如果匹配SomeValue的对象在第一个位置,那么我需要位置2-5的3个对象和最后3个位置的3个对象,总共需要6个对象。
谢谢你的建议。
发布于 2012-11-05 03:30:16
试试这个:
var theObj = TheListOfMyObjects.First(x => x.TheProperty == someValue);
var index = TheListOfMyObjects.IndexOf(theObj);
//and from there it's obvious.如果列表中可能不包含这样的元素,请在theObj上使用FirstOrDefault并检查null。
发布于 2012-11-05 03:56:48
很抱歉回答得太晚了,我的电脑出了问题。你不需要添加另一个列表,如果你的列表中至少有7个对象,你可以用下面这样的东西来解决边缘情况:
MyObject mo = list.FirstOrDefault(x => x.TheProperty.Equals(SomeValue));
if(mo != null)
{
int index = list.IndexOf(mo);
MyObject moMinus3 = list[(index - 3 + list.Count) % list.Count];
MyObject moMinus2 = list[(index - 2 + list.Count) % list.Count];
MyObject moMinus1 = list[(index - 1 + list.Count) % list.Count];
MyObject mo0 = list[index];
MyObject moPlus1 = list[(index + 1 + list.Count) % list.Count];
MyObject moPlus2 = list[(index + 2 + list.Count) % list.Count];
MyObject moPlus3 = list[(index + 3 + list.Count) % list.Count];
}https://stackoverflow.com/questions/13222005
复制相似问题