MyList
List<Person>
可能有Person
,其Name
屬性設置爲「ComTruise」。我需要該列表中Person
的索引。不是Person
,只是它的索引。獲取列表中物品的索引
什麼我現在做的是:
string myName = ComTruise;
int thatIndex = MyList.SkipWhile(p => p.Name != myName).Count();
我怎麼可以做的更好,或者使用的IndexOf方法來執行相同的任務?
MyList
List<Person>
可能有Person
,其Name
屬性設置爲「ComTruise」。我需要該列表中Person
的索引。不是Person
,只是它的索引。獲取列表中物品的索引
什麼我現在做的是:
string myName = ComTruise;
int thatIndex = MyList.SkipWhile(p => p.Name != myName).Count();
我怎麼可以做的更好,或者使用的IndexOf方法來執行相同的任務?
因爲它是一個ObservableCollection
,你可以試試這個
int index = MyList.IndexOf(MyList.Where(p => p.Name == "ComTruise").FirstOrDefault());
它將返回-1
如果「ComTruise」沒有您的收藏中存在。
正如在評論中提到的那樣,這會執行兩次搜索。您可以使用for循環對其進行優化。
int index = -1;
for(int i = 0; i < MyList.Count; i++)
{
//case insensitive search
if(String.Equals(MyList[i].Name, "ComTruise", StringComparison.OrdinalIgnoreCase))
{
index = i;
break;
}
}
var p = MyList.Where(p => p.Name == myName).FirstOrDefault();
int thatIndex = -1;
if (p != null)
{
thatIndex = MyList.IndexOf(p);
}
if (p != -1) ...
這可能是有意義的編寫,做一個簡單的擴展方法:
public static int FindIndex<T>(
this IEnumerable<T> collection, Func<T, bool> predicate)
{
int i = 0;
foreach (var item in collection)
{
if (predicate(item))
return i;
i++;
}
return -1;
}
這幾乎是的IndexOf做什麼... –
是MYLIST自己的收藏或者是列表? –
對不起,改正了。 IndexOf的語法怎麼樣? – Sturm