C sharp - Convertir de Java a C#

 
Vista:

Convertir de Java a C#

Publicado por Sebas (7 intervenciones) el 17/10/2018 00:59:34
Buen dia. Necesito convertir este codigo JavaS a C#, muchas gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/****************************************************** */
 
var archivoNombres = ['VOLOTEA', 'VUELING', 'COBALT'];
var archivoLetras = ['T','U','E','V','E','O','A', 'I', 'C','L','R','N','O','G','A'];
var palabrasQueSiSeCompletan = [];
var palabrasQueNoSeCompletan = [];
 
//palabra por palabra
 
$.each(archivoNombres, function( index, palabra ) {
    console.log(palabra);
    var tempArray = palabra.split("");
    console.log(tempArray); //['V' 'O' 'L' 'O' 'T' 'E' 'A']
    var copiaArchivoLetras =  archivoLetras.slice(); //le sacamos una copia
    $.each(tempArray, function( index, letra ) {
        //en cada value viene una letra
        var hayLetra = false
        var indiceLetra = 0;
        for (var i = 0; i < copiaArchivoLetras.length; i++) {
            if(letra == copiaArchivoLetras[i] && !hayLetra)
            {
                hayLetra = true;
                indiceLetra = i;
            }
        }
        if(hayLetra){
            copiaArchivoLetras.splice(indiceLetra,1);
        }
    });
    console.log("------");
    console.log(copiaArchivoLetras);
    if(archivoLetras.length == (copiaArchivoLetras.length + tempArray.length))
    {
        palabrasQueSiSeCompletan.push(palabra);
        archivoLetras = copiaArchivoLetras.slice();
    }
    else
    {
        palabrasQueNoSeCompletan.push(palabra);
    }
 
});
 
console.log(palabrasQueSiSeCompletan);
console.log(palabrasQueNoSeCompletan);
console.log(archivoLetras);
 
 
/****************************************************** */
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 218
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Convertir de Java a C#

Publicado por Cesar (82 intervenciones) el 17/10/2018 01:06:56
Hola.

Eso no es Java, es JavaScript, y empleando la libreria JQuery.

Pasarlo a C#, queda casi identico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Convertir de Java a C#

Publicado por Sebas (7 intervenciones) el 17/10/2018 01:11:10
Estimado Cesar,

Gracias.
Sucede que tengo varios errores, entre ellos la implementación de :

1
$.each(tempArray, function( index, letra ){


Me indica que la función de se puede usar de esa manera.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 218
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Convertir de Java a C#

Publicado por Cesar (82 intervenciones) el 17/10/2018 01:17:15
Hola.

El nombre de esa funcion es muy claro, es un ForEach.

Su equivalente seria:

1
2
3
foreach(var letra in tempArray)
{
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convertir de Java a C#

Publicado por Sebas (7 intervenciones) el 17/10/2018 01:30:39
Estimado Cesar,

Te agradezco mucho.
Me podrías indicar cual sería el equivalente para las siguientes
En la primera linea me indica que no se puede usar Split para un covertir de string a char.
En la segunda me indica que Slice no contiene una definición o relación para un String.

1
2
string[] tempArray = palabra.Split(""); //no se puede usar Split para un covertir de string a char. 
var copiaArchivoLetras = archivoLetras.Slice(); //Slice no contiene una definición o relación para un String.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 373
Plata
Ha aumentado su posición en 2 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Convertir de Java a C#

Publicado por Agustin (171 intervenciones) el 17/10/2018 02:00:01
En realidad javascript es un lenguaje profundamente deficiente, ya que no tiene una stdlib como la gente.

C# en cambio, es un lenguaje moderno y productivo, con lo cual la cantidad enorme de basura que hay que hacer en javascript para resolver cualquier cosa, en C# se resuelve con un par de instrucciones de alto nivel.

En este caso puntual, el objetivo del codigo es, dada una lista de letras y otra lista de palabras, averiguar cual de las palabras se completan con las letras de las que se disponen. Como una especie de ahorcado o Scrubble.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var nombres = new[]{ "VOLOTEA", "VUELING", "COBALT" };
var letras = new []{ 'T','U','E','V','E','O','A', 'I', 'C','L','R','N','O','G','A' };
 
bool ExisteLetra(char letra) => letras.Contains(letra);
bool PalabraCompleta(string palabra) => palabra.All(ExisteLetra);
bool PalabraIncompleta(string palabra) => !PalabraCompleta(palabra);
 
var palabrasQueSiSeCompletan = nombres.Where(PalabraCompleta);
var palabrasQueNoSeCompletan = nombres.Where(PalabraIncompleta);
 
Console.WriteLine("Palabras Que si se completan:");
foreach (var p in palabrasQueSiSeCompletan)
    Console.WriteLine(p);
 
Console.WriteLine("Palabras que no se completan:");
foreach (var p in palabrasQueNoSeCompletan)
    Console.WriteLine(p);

Fijate que los unicos foreach que hago son para mostrar por consola los resultados, pero para el cálculo en si o la funcionalidad no necesito nada de eso. Ni foreach, ni indices, ni arrays temporarios, ni ninguna otra cosa remanente de la forma de programar de 1999.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convertir de Java a C#

Publicado por Sebas (7 intervenciones) el 17/10/2018 02:14:48
Estimado Agustin,

Muchas gracias.
Una consulta adicional. Sucede que con la implementación en JS me arrojaba que la palabra que se completaba era una, y dos no se completaban. Sin embargo, al implementarlo en C# me indica que son dos las que se completan y una no lo hace.

Adicionalmente, me podrías explicar brevemente como manejaste lo siguiente, Entiendo que fue con Linq

1
2
3
bool ExisteLetra(char letra) => letras.Contains(letra);
bool PalabraCompleta(string palabra) => palabra.All(ExisteLetra);
bool PalabraIncompleta(string palabra) => !PalabraCompleta(palabra);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 373
Plata
Ha aumentado su posición en 2 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Convertir de Java a C#

Publicado por Agustin (171 intervenciones) el 17/10/2018 02:50:20
Sucede que con la implementación en JS me arrojaba que la palabra que se completaba era una, y dos no se completaban. Sin embargo, al implementarlo en C# me indica que son dos las que se completan y una no lo hace.

Si. Despues de postear el comment me di cuenta que en realidad habia que quitar las letras de la lista luego de tomarlas para una determinada palabra:

1
2
3
4
5
6
7
8
9
10
bool ExisteLetra(char letra)
{
    if (letras.Contains(letra))
    {
        letras.Remove(letra);
        return true;
    }
 
    return false;
}

y luego para no volver a repetir palabras una vez que se procesan:

1
2
3
4
5
6
7
var palabrasQueSiSeCompletan =
    nombres.Where(PalabraCompleta)
        .ToList();
 
var palabrasQueNoSeCompletan =
    nombres.Except(palabrasQueSiSeCompletan)
        .Where(PalabraIncompleta);

El código completo te queda así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using System.Linq;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var nombres = new[] { "VOLOTEA", "VUELING", "COBALT" };
            var letras = new[] { 'T', 'U', 'E', 'V', 'E', 'O', 'A', 'I', 'C', 'L', 'R', 'N', 'O', 'G', 'A' }.ToList();
 
            bool ExisteLetra(char letra)
            {
                if (letras.Contains(letra))
                {
                    letras.Remove(letra);
                    return true;
                }
 
                return false;
            }
 
            bool PalabraCompleta(string palabra) => palabra.All(ExisteLetra);
            bool PalabraIncompleta(string palabra) => !PalabraCompleta(palabra);
 
            var palabrasQueSiSeCompletan =
                nombres.Where(PalabraCompleta)
                       .ToList();
 
            var palabrasQueNoSeCompletan =
                nombres.Except(palabrasQueSiSeCompletan)
                       .Where(PalabraIncompleta);
 
            Console.WriteLine("Palabras Que si se completan:");
            foreach (var p in palabrasQueSiSeCompletan)
                Console.WriteLine(p);
 
            Console.WriteLine("Palabras que no se completan:");
            foreach (var p in palabrasQueNoSeCompletan)
                Console.WriteLine(p);
 
            Console.ReadLine();
        }
    }
}

Adicionalmente, me podrías explicar brevemente como manejaste lo siguiente, Entiendo que fue con Linq

Exacto. Ahi tenes varias cosas:

1 - esas son funciones locales. Es similar a declarar un function dentro de otro function en javascript.

2 - En lugar de declarar un cuerpo (body) usando llaves "{" y "}", uso Expression Bodied members. Es una forma de declarar lambdas de forma breve.

3 - Hago uso extensivo de las facilidades que provee LINQ, que en realidad es una parte fundamental de C#. Casi todo el código C# que escribo en el día a día hace uso fuerte de todas estas ventajas. Es justamente lo que diferencia a C# de otros lenguajes que se quedaron en 1999.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convertir de Java a C#

Publicado por Sebas (7 intervenciones) el 17/10/2018 03:03:43
Estimado Agustian,

Eso veo, realmente con la implementacion de C# se resumen muchísimo las lineas de código (Estoy aprendiendo recientemente sobre C# y hay cosas interesantes).
En cuanto Linq veo que también optimiza el uso de lo mencionado.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Convertir de Java a C#

Publicado por Sebas (7 intervenciones) el 17/10/2018 19:49:41
Estimado Agustin,

Una consulta adicional.
Sucede que estoy intentando guardar las letras desde un archivo suministrado (Letras.txt) con un botón. Lo estoy haciendo de esta manera:

1
char[] PrincipalArchiveLetter = File.ReadAllLines(@"~/Data/Letras.txt");

Sin embargo, con

1
if (letras.Contains(letra))

Me indica que no se puede hacer el uso de Contains con un string.

¿Debería asignar el contenido del archivo letras.txt de otra forma (Este archivo tiene las letras sin comas, ni comillas) ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar