using System;
using System.Collections.Generic;
using System.Linq;
public class TEST
{
public static void Main()
{
//検索元の配列
List<string> array = new List<string> { "red", "blue", "yellow", "pink", "green", "blue", "green", "blue", "red", "blue", "yellow" };
List<string> sub1 = new List<string> { "blue", "yellow" }; //ある
List<string> sub2 = new List<string> { "blue", "green" }; //ある
List<string> sub3 = new List<string> { "blue", "hoge" }; //ない
Console.WriteLine(string.Join(",", array.Any(sub1)));
Console.WriteLine(string.Join(",", array.Any(sub2)));
Console.WriteLine(string.Join(",", array.Any(sub3)));
}
}
public static class IEnumerableExtensions
{
public static IEnumerable<int> Any<T>(this IEnumerable<T> source, IEnumerable<T> target)
{
return source
.Select((v, i) => new
{
v = source.Skip(i).Take(target.Count()),
i = i
})
.Select(x => (x.v.SequenceEqual(target)) ? x.i : -1)
.Where(x => x >= 0);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVEVTVAp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CiAgICAgICAgLy/mpJzntKLlhYPjga7phY3liJcKICAgICAgICBMaXN0PHN0cmluZz4gYXJyYXkgPSBuZXcgTGlzdDxzdHJpbmc+IHsgInJlZCIsICJibHVlIiwgInllbGxvdyIsICJwaW5rIiwgImdyZWVuIiwgImJsdWUiLCAiZ3JlZW4iLCAiYmx1ZSIsICJyZWQiLCAiYmx1ZSIsICJ5ZWxsb3ciIH07CiAgICAgICAgCiAgICAgICAgTGlzdDxzdHJpbmc+IHN1YjEgPSBuZXcgTGlzdDxzdHJpbmc+IHsgImJsdWUiLCAieWVsbG93IiB9OyAvL+OBguOCiwogICAgICAgIExpc3Q8c3RyaW5nPiBzdWIyID0gbmV3IExpc3Q8c3RyaW5nPiB7ICJibHVlIiwgImdyZWVuIiB9OyAvL+OBguOCiwogICAgICAgIExpc3Q8c3RyaW5nPiBzdWIzID0gbmV3IExpc3Q8c3RyaW5nPiB7ICJibHVlIiwgImhvZ2UiIH07IC8v44Gq44GECgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKHN0cmluZy5Kb2luKCIsIiwgYXJyYXkuQW55KHN1YjEpKSk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoc3RyaW5nLkpvaW4oIiwiLCBhcnJheS5Bbnkoc3ViMikpKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZShzdHJpbmcuSm9pbigiLCIsIGFycmF5LkFueShzdWIzKSkpOwogICAgfQp9CgpwdWJsaWMgc3RhdGljIGNsYXNzIElFbnVtZXJhYmxlRXh0ZW5zaW9ucwp7CiAgICBwdWJsaWMgc3RhdGljIElFbnVtZXJhYmxlPGludD4gQW55PFQ+KHRoaXMgSUVudW1lcmFibGU8VD4gc291cmNlLCBJRW51bWVyYWJsZTxUPiB0YXJnZXQpCiAgICB7CiAgICAgICAgcmV0dXJuIHNvdXJjZQogICAgICAgICAgICAuU2VsZWN0KCh2LCBpKSA9PiBuZXcKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdiA9IHNvdXJjZS5Ta2lwKGkpLlRha2UodGFyZ2V0LkNvdW50KCkpLAogICAgICAgICAgICAgICAgaSA9IGkKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLlNlbGVjdCh4ID0+ICh4LnYuU2VxdWVuY2VFcXVhbCh0YXJnZXQpKSA/IHguaSA6IC0xKQogICAgICAgICAgICAuV2hlcmUoeCA9PiB4ID49IDApOwogICAgfQp9