Если это всегда статичны, я имею в виду всегда два списка (или preffixes), вы можете сделать вложенные циклы:
List<string> list = new List<string>();
list.Add("S1");
list.Add("R1");
list.Add("R2");
list.Add("S2");
list.Add("S3");
петля
foreach (var s in list.Where(l => l.StartsWith("S")))
{
foreach (var r in list.Where(l => l.StartsWith("R")))
{
Console.WriteLine(string.Format("{0} => {1}", s, r));
}
}
или:
list.Where(l => l.StartsWith("S")).ToList().ForEach(s => list.Where(l => l.StartsWith("R")).ToList().ForEach(r => Console.WriteLine(string.Format("{0} => {1}", s, r))));
Вместо Console.WriteLine вы можете добавить t он приводит к другому списку.
Это звучит как 2 списка, а не один. Вам нужны комбинации всех элементов в списке S с R-списком. Мышление таким образом делает работу такой же простой, как вложенный цикл. –
Список пар для элементов R для перехода в другой список, O (n). Для каждого оставшегося S постройте словарь, который каждый элемент S указывает на тот же список с элементами R. –
Походит на «Декартово произведение» (http://stackoverflow.com/questions/1741364/efficient-cartesian-product-algorithm) - не действительно уверен, что это то, о чем вы просите. –