Elemar DEV

Tecnologia e desenvolvimento .net

SNIPPET: O que esse código faz?!

Olá pessoal. Tudo certo?!

Um colega meu pediu ajuda para escrever um função simples. De fato, o framework já tem ela implementada.

Minha proposta foi:

var result = string.Join(@"\", that.Split('\\', '/')
    .Reverse()
    .SkipWhile(s => s == String.Empty)
    .Skip(1)
    .Reverse().ToArray()
    );

Ele achou muito complexo. Você também acha!? Você saberia dizer o que esse código faz?

20 Comentários em “SNIPPET: O que esse código faz?!

  1. Você vai trocar todos os ‘\’ e ‘/’ por ‘\’ alem de tirar as combinações que sejam “//” ou “\\” e retornar somente a calda do array(tirando o elemento da cabeça), é isso?

  2. Ele tira as \ e /, substitue por \ e tira o último segmento… acho que é pra voltar uma pasta numa URI ou Path…

  3. elemarjr
    29/06/2012

    Isso! é um Path.GetDirectoryName :D

    • Então, não foi dificil entender… Mas definitivamente não é como eu faria! Faria com replace, lastindexof e substring. Ou com Path.GetDirectoryName xD

      • elemarjr
        29/06/2012

        Pois é, mas repare que o LastIndexOf tem suas armadilhas. Cola o código aí :D (ou em um GIST)


        • string that = "http://elemarjr.net/2012/06/29/snippet-o-que-esse-cdigo-faz/";
          var tmp = that.Trim().Replace('/', '\\');
          if (tmp.Substring(tmp.Length - 1, 1) == @"\")
          tmp = tmp.Substring(0, tmp.Length - 1);
          int index = tmp.LastIndexOf('\\');
          var result = tmp.Substring(0, index);

  4. alexsandro_xpt
    29/06/2012

    Separa o that por \ ou por / e depois os junta separando por \ novamente e depois reverte a string e remove os espaços em branco e depois remove 1 elemento do IEnumerable depois volta de novo a ordem antiga? :| Ixi.. sei não.. complexo mesmo.

    • elemarjr
      29/06/2012

      nops .. nada contra espaços em branco .. não pegou a idéia :D

  5. alexsandro_xpt
    29/06/2012

    SkipWhile(s => s == String.Empty) pensei que skip nos s em branco.

    • elemarjr
      29/06/2012

      mas não é, man .. tudo para evitar a armadilha de “c:\program files\my program\”.. que geraria um item vazio na lista :D

  6. alexsandro_xpt
    29/06/2012

    great!! manda mais! rs..

  7. Hugo Nickerson
    30/06/2012

    Ai The Best, na verdade seu amigo pode ter achou o código muito complexo pois realizar varias rotinas de uma unica vez.

    Mas se voltarmos no post anterior s == String.Empty)) e usa o .Skip(1) para ignorar o primeiro elemento.
    Por ultimo ordenar a string de forma reversa.

    Se extrair blocos deste código provavelmente ficaria mais claro.

  8. Hugo Nickerson
    30/06/2012

    Ai The Best, na verdade seu amigo pode ter achou o código muito complexo pois realizar varias rotinas de uma unica vez.

    Mas se voltarmos no post anterior <a href="http://www.elemarjr.net/2012/06/26/pareando-como-voc-escreveria-esse-cdigo/&quot; Como você escreveria esse código? Consegue deixar ele mais simples?", podemos deixar esse código mais claro.

    Vou dizer o que entendi sobre o código.

    Você tem uma string com o nome de that no qual é feito um split por ‘\\’ e ‘/’ que retorna um array e depois disso converte para uma string novamente usando o separador ‘\’ para concatenar a string.
    Em seguida ordena a string de forma reversa.
    Depois disso usa o seguinte código para retira os espaços que pode conter nessa string (.SkipWhile(s => s == String.Empty)) e usa o .Skip(1) para ignorar o primeiro elemento.
    Por ultimo ordenar a string de forma reversa.

    Se extrair blocos deste código provavelmente ficaria mais claro.

    • elemarjr
      01/07/2012

      “The Best”, Eu?! Longe disso.

      Mais de uma pessoa me deu essa dica. O que acha de “refatorar” esse código em um Gist?!

      []s

  9. Leza Morais Lutonda
    01/07/2012

    Para evitar o SkipWhile que está aí sugiro fazer com que o Split ignore elementos vazios: that.Split(new[] {‘\\’, ‘/’}, StringSplitOptions.RemoveEmptyEntries);

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

Você está comentando usando sua conta WordPress.com. Sair / Mudar )

Imagem do Twitter

Você está comentando usando sua conta Twitter. Sair / Mudar )

Foto do Facebook

Você está comentando usando sua conta Facebook. Sair / Mudar )

Conectando a %s

Informação

Publicado às 29/06/2012 por em Post e marcado .

Estatísticas

  • 428,584 hits
%d bloggers like this: