【问题标题】:How to split the elements ​of an array of strings if they are equal?如果字符串数组的元素相等,如何拆分它们?
【发布时间】:2021-05-22 12:41:27
【问题描述】:

早安,

我目前有一个这样的字符串数组:

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();

谢谢你的帮助!

【问题讨论】:

  • 怎么样:var c = array.Where(x => x.Contains('c')).ToArray()?字典会比许多局部变量做得更好。

标签: c# arrays linq


【解决方案1】:

尽管看到了您要求的内容,但您想要的结果非常有限,以后无法使用。您应该利用在 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();
}

【讨论】:

  • +1,但请注意 ToList() 调用不是必需的 - 您可以直接在数组上调用 GroupBy,也可以在返回的 IGrouping 上直接调用 FirstOrDefault按 GroupBy。
  • @AvnerShahar-Kashtan 好吧,.ToList 对我来说是必要的性能目的,否则因为他需要在他的示例中进行 6 次此调用,因此如果我们离开 @987654327,它将执行 7 次分组@ 而使用.ToList 只会执行一次。
  • 弗兰克,感谢您的回答,但母矩阵的元素总是会改变,而且总是不一样。
  • @Franck:数组上的第一个 ToList 没有意义。第二个,在GroupBy 之后,可用于避免与FirstOrDefault 重复迭代,但如果用例有点不同,这可能不相关 - 例如,在IGrouping 上调用ToDictionary 来创建映射:array.GroupBy(x=>x).ToDictionary(g => g.Key, g => g)
  • @AvnerShahar-Kashtan 哦,是的,没有注意到阵列上的那个。我是习惯写的,我会删掉的。
【解决方案2】:

希望这是您正在寻找的解决方案,祝您好运!

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

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    相关资源
    最近更新 更多