How to do cascading splitting using C # Linq - multiple foreach sections

These are the values ​​that I want to split into a cascading string.

List<string> lstsplitWord = new List<string> { ",", "=", "،", "أو", "او", "/", "." };

I wrote them like this, but I guess there should be a more elegant Linq solution for this

    foreach(var part1 in srSplitPart.Split(',')) {
     foreach(var part2 in part1.Split('=')) {
      foreach(var part3 in part2.Split('،')) {
       foreach(var part4 in part3.func_Split_By_String("أو")) {
        foreach(var part5 in part4.func_Split_By_String("او")) {
         foreach(var part6 in part5.Split('/')) {
          foreach(var part7 in part6.Split('.')) {
           if (part7.Length < 3)
            continue;
           string srTrans = part7.FixArabic().func_Special_Trim();

           srTemp.AppendLine($ "{srTitle} > {srTrans} \t {irTransLevel}");
           irTransLevel++;
          }
         }
        }
       }
      }
     }
    }

C # .net 4.6.2

special separation function

public static List<string> func_Split_By_String(this string Sentence, string srReplace)
{
    return Sentence.Split(new string[] { srReplace }, StringSplitOptions.None).ToList();
}
+4
source share
1 answer

You can simply iteratively divide each element into smaller parts in a specific order:

string originalString = ...;
List<string> separators = new List<string> { ",", "=", "،", "أو", "او", "/", "." };

string[] result = new[] { originalString };

foreach (var separator in separators)
{
    result = result.SelectMany(x => x.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries)).ToArray();
}

result = result
    .Where(x => x.Length >= 3)
    .Select(x => x.FixArabic().func_Special_Trim())
    .ToArray();

foreach (var item in result)
{
    srTemp.AppendLine($ "{srTitle} > {srTrans} \t {irTransLevel}");
    irTransLevel++;
}

.
foreach , ",".
foreach =.
, result , . Length >= 3 FixArabic() func_Special_Trim().

: : , .

, :

string originalString = ...;
string[] separators = new[] { ",", "=", "،", "أو", "او", "/", "." };

string[] result = originalString
    .Split(separators, StringSplitOptions.RemoveEmptyEntries)
    .Where(x => x.Length >= 3)
    .Select(x => x.FixArabic().func_Special_Trim())
    .ToArray();

foreach (var item in result)
{
    srTemp.AppendLine($ "{srTitle} > {srTrans} \t {irTransLevel}");
    irTransLevel++;
}
+3

Source: https://habr.com/ru/post/1678105/


All Articles