LinQ FindAllIndex

  • 76
  • 0

使用擴充方法找到對應資料的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