C# 基于部分匹配从单个列表中获取两个列表
我有一张这样的字符串列表C# 基于部分匹配从单个列表中获取两个列表,c#,list,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.Ite
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
我想从这个列表中得到两个独立的列表,基于不同的“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
及
这就是我迄今为止所尝试的。但它没有返回所需的输出
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]);
}
你可以用
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 allLists=字符串
.Select(str=>new{str,token=str.Split('.')})
.其中(x=>x.token.Length>=2)
.GroupBy(x=>string.Concat(x.token.Take(2)))
.Select(g=>g.Select(x=>x.str).ToList())
.ToList();
此列表包含两个
list
。第一个列表包含6行Item1,第二个列表包含5行Item2。到目前为止您尝试过什么吗?这看起来像是regex的工作-你知道吗?我已经更新了我的问题并添加了试用代码。你可能还想放置你现在得到的输出。谢谢Tim,你的代码正符合我的要求。
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();