Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何分割元素​;如果字符串的数组相等,则为?_C#_Arrays_Linq - Fatal编程技术网

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()
?字典将比许多局部变量做得更好。