根据部分匹配从单个列表中获取两个列表

时间:2015-03-16 12:39:48

标签: c# list

我有一个像这样的字符串列表。

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"从此列表中选择两个单独的List。 所以答案将是

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]);
}

1 个答案:

答案 0 :(得分: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>。第一行包含6行Item1,第二行包含5行Item2。