Manipulate String C #

3

I have strings that come like this:

"Cadastro,Novo"
"Cadastro,Editar"
"Cadastro,Excluir"
"Cadastro,Morfar"
"Cadastro,Etc"

"Entidade,Novo"
"Entidade,Editar"
"Entidade,Excluir"
"Entidade,Morfar"
"Entidade,Etc"

And I have 2 columns that I want to fill:

Coluna1 | Coluna2

The order should be as follows:

Coluna1 = Cadastro 
Coluna2 = "Novo,Editar,Excluir,OqueVim"

But I can not repeat the Record value when I will concatenate the values in Column2.

Can anyone explain how to do this?

My code looks like this:

Class to Add Final Values

public class ListaFinal
{
  public string valor1 { get; set; }
  public string valor2 { get; set; }
}

Code:

 var listaFinal = new List<ListaFinal>();
      var adiciona = new List<string>();
      adiciona.Add("Cadastro.Novo");
      adiciona.Add("Cadastro.Editar");
      adiciona.Add("Cadastro.Deletar");
      adiciona.Add("Cadastro.Excluir");
      adiciona.Add("Cadastro.ALGO");

      adiciona.Add("Entidade.Item1");
      adiciona.Add("Entidade.Enti");
      adiciona.Add("Entidade.dade");
      adiciona.Add("Entidade.outro");
      adiciona.Add("Entidade.test");

      string coluna1 = "";
      string coluna2 = "";
      foreach (var x in adiciona)
      {
        var aux = "";
        coluna2 = x.Split('.')[1];
        if (string.IsNullOrEmpty(coluna1))
        {
          coluna1 = x.Split('.')[0];

          listaFinal.Add(new ListaFinal
          {
            valor1 = coluna1,
            valor2 = coluna2
          });
        }
        else
        {
          aux = x.Split('.')[0];
          if (aux != coluna1)
          {
            coluna1 = aux;

            listaFinal.Add(new ListaFinal
            {
              valor1 = coluna1,
              valor2 = coluna2
            });

          }

        }
        coluna1 = coluna1;
      };

Final result: 2 items in the list, with the fields before the comma without repeating, but I have not concatenated the values after the comma.

    
asked by anonymous 04.09.2014 / 22:36

1 answer

3

Use% with% ( link ):

var strings = suaString.Split(',');

In this case, String.Split is strings .

As requested in commentary, to use in the form of dictionaries (or maps), in C # it works as follows:

var dict = new Dictionary<string, string[]>();
var subarray = new string[strings.Length - 1];
Array.Copy(strings, 1, subarray, 0, dict.Length - 1)
dict.Add(strings[0], subarray);

EDIT

After the questioner put the code, I modified it to the following:

        var listaFinal = new Dictionary<String, List<String>>();
        var adiciona = new List<string>();
        adiciona.Add("Cadastro.Novo");
        adiciona.Add("Cadastro.Editar");
        adiciona.Add("Cadastro.Deletar");
        adiciona.Add("Cadastro.Excluir");
        adiciona.Add("Cadastro.ALGO");

        adiciona.Add("Entidade.Item1");
        adiciona.Add("Entidade.Enti");
        adiciona.Add("Entidade.dade");
        adiciona.Add("Entidade.outro");
        adiciona.Add("Entidade.test");

        foreach (var x in adiciona)
        {
            var s = x.Split('.').ToList();
            if (!listaFinal.ContainsKey(s.First())) listaFinal[s.First()] = new List<string>();
            listaFinal[s.First()].AddRange(s.Skip(1).ToList());
        };

        foreach (var chaveValor in listaFinal)
        {
            // chaveValor.Key contém o elemento "Cadastro" ou "Entidade".
            // chaveValor.Value contém uma lista de strings que é o valor depois do  ponto de cada elemento.
        }
    
04.09.2014 / 22:40