如何将动态变化的字符串数组中相同元素分组至独立子数组?
解决动态字符串数组的元素分组问题
嘿,我明白你想要实现的需求了——把动态变化的字符串数组里的相同元素分别归类成单独的数组集合对吧?你之前用的Linq写法没达到预期很正常,因为array.Where(x => array.Contains(x))其实只是把原数组里的所有元素原样返回,完全没做分组操作。
要实现按相同元素分组的需求,Linq里的GroupBy方法才是正确的选择,它专门用来根据指定的键对元素进行分组。下面给你两种实用的实现方案:
方案一:直接生成分组后的数组集合
这种方式会得到一个包含所有分组数组的二维数组,每个子数组对应一组相同的元素:
string[] array = {"aa","bb","cc","dd","aa","cc","ee","ff","aa","bb"}; // 分组并转换为数组集合 string[][] groupedArrays = array .GroupBy(item => item) // 以元素本身作为分组键,把相同元素归为一组 .Select(group => group.ToArray()) // 将每个分组转换为字符串数组 .ToArray(); // 最终得到包含所有分组的二维数组
你可以遍历这个二维数组来获取每一组元素,比如第一个子数组就是所有"aa"的集合,第二个是"bb"的集合,以此类推。
方案二:用字典存储分组(更适合动态场景)
如果原数组元素是动态变化的,用字典存储会更方便——你可以直接通过元素值(字典的Key)快速获取对应的分组数组:
string[] array = {"aa","bb","cc","dd","aa","cc","ee","ff","aa","bb"}; // 分组并转换为字典 Dictionary<string, string[]> groupedDictionary = array .GroupBy(item => item) .ToDictionary(group => group.Key, group => group.ToArray());
之后要获取某一组元素时,直接通过Key访问即可:
// 获取所有"aa"的数组 string[] aaArray = groupedDictionary["aa"]; // 获取所有"bb"的数组 string[] bbArray = groupedDictionary["bb"];
这种方式不管原数组新增什么元素,字典都会自动生成对应的Key和分组数组,非常适配动态场景。
内容的提问来源于stack exchange,提问作者Jonathan Burgos G.
相关产品推荐
相关产品推荐

