使用擴充方法找到對應資料的indexes
近期遇到了一個特殊的問題
題目是 : 有List<int> A 和List<int> B,使用A的元素在B中找到有相同元素的indexes
ex :
A = {1,5,7,9};
B = {5,5,1,7,7,9,1,9};
解答:
1=>2,6
5=>0,1
7=>3,4
9=>5,7
程式寫法 :
建立擴充方法:
public static class CollectionsExtensions
{
public static List<int> FindAllIndexof<T>(this IEnumerable<T> values, T val)
{
return values.Select((b, i) => object.Equals(b, val) ? i : -1).Where(i => i != -1).ToList();
}
}
此擴充方法可以回傳符合該val的List<int>
測試程式:
List<int> data1 = new List<int> { 1, 5, 8, 20 };
List<int> data2 = new List<int> { 1, 1, 5, 8, 8, 8, 20, 8, 8, 20, 5, 5 };
var asdf = from d1 in data1
select data2.FindAllIndexof(d1);
其實這種問題應該要在源頭就先解決,相同的資料就放在一起,不然分開放還要想其他方法才能解決(例如用這次找index來找資料一樣)
雖然遇到這種問題還挺有趣的.............
參考資料 :
https://stackoverflow.com/questions/10443461/c-sharp-array-findallindexof-which-findall-indexof