假设我有一个名为TheListOfMyObjects
的对象列表。在该列表中,有一个属性值匹配值为的对象:MyObject.TheProperty = SomeValue
。从列表中获取元素索引
如何从此列表中获取前3个对象和下3个对象?
请注意,如果匹配SomeValue
的对象处于第一个位置,那么我需要位置2-5中的3个对象和最后3个位置中的3个对象共6个对象。
感谢您的建议。
假设我有一个名为TheListOfMyObjects
的对象列表。在该列表中,有一个属性值匹配值为的对象:MyObject.TheProperty = SomeValue
。从列表中获取元素索引
如何从此列表中获取前3个对象和下3个对象?
请注意,如果匹配SomeValue
的对象处于第一个位置,那么我需要位置2-5中的3个对象和最后3个位置中的3个对象共6个对象。
感谢您的建议。
试试这个:
var theObj = TheListOfMyObjects.First(x => x.TheProperty == someValue);
var index = TheListOfMyObjects.IndexOf(theObj);
//and from there it's obvious.
万一有一个机会,名单将不包含这样的元素,使用FirstOrDefault和检查空上theObj。
对不起,我的电脑出现了问题。您不必添加另一个列表,就可以解决边缘例这样的事情,如果你的列表中有至少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];
}
[你尝试过什么(http://whathaveyoutried.com )? – Oded
我尝试通过将每个元素与foreach循环一起推入数组,将列表转换为数组。现在我有一个索引数组,但我想知道是否有一个更短的基于LINQ的方法。 – frenchie
如果您正在使用'IList',您可以通过索引来访问它。使用LINQ,你可以看看使用'Take'(假设你有初始索引)。但是你没有提到列表变量的类型,也没有提到你想要一个LINQ实现。 –
Oded