2015-03-16 2 views
1

У меня есть список таких строк.Получить два списка из одного списка на основе частичного совпадения

MainItem.Item1.AssetID_0 
MainItem.Item1.AssetID_1 
MainItem.Item1.AssetID_2 
MainItem.Item1.AssetID_3 
MainItem.Item1.AssetID_4 
MainItem.Item1.AssetID_5 
MainItem.Item2.AssetID_1 
MainItem.Item2.AssetID_2 
MainItem.Item2.AssetID_3 
MainItem.Item2.AssetID_4 
MainItem.Item2.AssetID_5 

Я хочу два отдельных списка из этого списка на основе Distinct "MainItem.Item". Так ответ будет

MainItem.Item1.AssetID_0 
MainItem.Item1.AssetID_1 
MainItem.Item1.AssetID_2 
MainItem.Item1.AssetID_3 
MainItem.Item1.AssetID_4 
MainItem.Item1.AssetID_5 

и

MainItem.Item2.AssetID_1 
MainItem.Item2.AssetID_2 
MainItem.Item2.AssetID_3 
MainItem.Item2.AssetID_4 
MainItem.Item2.AssetID_5 

Это то, что я пытался до сих пор. но не возвращает желаемый результат

var resultsLists = mainList.Select(GetPathFromKey).Distinct(); 

public static string[] Splitkey(string keyFromReading) 
{ 
     return keyFromReading.Split('.'); 
} 

public static string GetPathFromKey(string keyFromReading) 
{ 
    string[] splittedStrings = Splitkey(keyFromReading); 
    return String.Join(".", splittedStrings[0], splittedStrings[1]); 
} 
+3

Вы что-то пробовали? Это похоже на работу для регулярного выражения - знаете ли вы что-нибудь об этом? – bokibeg

+1

Я обновил свой вопрос и добавил код –

+0

Вы также можете захотеть разместить вывод, который вы получаете в данный момент. – Bono

ответ

1

Вы можете использовать ....

List<List<string>> allLists = strings 
    .Select(str => new { str, token=str.Split('.') }) 
    .Where(x => x.token.Length >= 2) 
    .GroupBy(x => string.Concat(x.token.Take(2))) 
    .Select(g => g.Select(x => x.str).ToList()) 
    .ToList(); 

Этот список содержит два List<string> .The первая содержит 6 линий с ITEM1 и второй содержит 5 строк с ITEM2 ,

+0

Спасибо, Тим, ваш код делает именно то, что я хотел. –