C# 如何分割元素;如果字符串的数组相等,则为?
你好 我目前有一个字符串数组,如下所示:C# 如何分割元素;如果字符串的数组相等,则为?,c#,arrays,linq,C#,Arrays,Linq,你好 我目前有一个字符串数组,如下所示: string[] array = {"aa","bb","cc","dd","aa","cc","ee","ff","aa","bb"} 我希望能够从同一字符串[]中获得相同的位置,例如: string[] a = {"aa",&quo
string[] array = {"aa","bb","cc","dd","aa","cc","ee","ff","aa","bb"}
我希望能够从同一字符串[]中获得相同的位置,例如:
string[] a = {"aa","aa","aa"}
string[] b = {"bb","bb"}
string[] c = {"cc","cc"}
string[] d = {"dd"}
string[] e = {"ee"}
string[] f = {"ff"}
应该注意的是,父矩阵的元素总是变化的,并不总是相同的
我试过和linq在一起,但是我没有得到我想要的
这是我对linq的尝试:
array.Where(x => array.Contains(x)).ToArray();
谢谢你的帮助 尽管看到了你所要求的,但你想要的结果是非常有限的,这在以后的工作中是没有用的。您应该利用linq中的
GroupBy
,然后在需要时在该集合中找到它
// your array
string[] array = {"aa","bb","cc","dd","aa","cc","ee","ff","aa","bb"};
// group by value
var groupedValues = array.GroupBy(x => x).ToList();
// get the "aa" group if exist
var aa = groupedValues.FirstOrDefault(x => x.Key == "aa");
// check if the group was found
if(aa != null)
{
// get all "aa" values in that group. This return this collection based on your inpit{ "aa", "aa", "aa" }
var allaaValues = aa.ToList();
}
希望这是您一直在寻找的解决方案,祝您好运
string[] array = { "aa", "bb", "cc", "dd", "aa", "cc", "ee", "ff", "aa", "bb" };
var splittedArray = new List<string[]>();
foreach (var strItem in array)
{
//Don't iterating duplicates
if (splittedArray.Any(si => si.Contains(strItem))) continue;
//if more then one item exists in the array getting those identic items and adding to the array list
if (array.Count(si => si.Equals(strItem)) > 0)
{
var identicItems = array
.Where(i => i.Equals(strItem))
.ToArray();
splittedArray.Add(identicItems);
}
else // Adding single item as a new array with this item
{
splittedArray.Add(new string[] { strItem });
}
}
string[]数组={“aa”、“bb”、“cc”、“dd”、“aa”、“cc”、“ee”、“ff”、“aa”、“bb”};
var splittedArray=新列表();
foreach(数组中的变量strItem)
{
//不要迭代重复项
如果(splittedArray.Any(si=>si.Contains(strItem)))继续;
//如果数组中存在多个项,则获取这些相同项并将其添加到数组列表中
if(array.Count(si=>si.Equals(strItem))>0)
{
var identitems=数组
.式中(i=>i.Equals(strItem))
.ToArray();
添加(标识项);
}
else//将单个项添加为此项的新数组
{
添加(新字符串[]{strItem});
}
}
+1,但请注意,ToList()调用不是必需的-您可以直接在数组上调用GroupBy
,您可以直接在GroupBy返回的i分组
上调用FirstOrDefault
。@Avnershaar Kashtan那么,.ToList
对我来说是性能所必需的,否则,因为在他的示例中,他需要调用6次,所以如果我们离开IEnumerable
,它将执行分组7次使用.ToList
只能执行一次。Franck,谢谢你的回答,但是母矩阵的元素总是变化的,而且总是不一样。@Franck:数组上的第一个ToList没有意义。在GroupBy
之后的第二个选项有助于避免重复使用FirstOrDefault
,但如果用例稍有不同,则这可能不相关-例如,在IGrouping
上调用ToDictionary
以创建映射:array.GroupBy(x=>x).ToDictionary(g=>g.Key,g=>g)
@AvnerShahar Kashtan Oh yeah没有注意到阵列上有一个。我习惯于写它,我会删除它。怎么样:var c=array.Where(x=>x.Contains('c')).ToArray()
?字典将比许多局部变量做得更好。