假設我有一個名爲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