🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: alt.pl.comp.lang.csharp
7 messages
7 total messages Started by agend Fri, 26 Feb 2010 15:47
jak to napisać w c#
#21378
Author: agend
Date: Fri, 26 Feb 2010 15:47
32 lines
2227 bytes
gdzieś widziałem że gość dostał na rozmowie kwalifikacyjnej takie
zadanie w Pythonie :
- napisać skrypt który odwróci wszystkie wyrazy w zdaniu, zachowując
szyk zdania, czyli
"Ala ma kota" zamieni na "alA am atok"

i można to ładnie zrobić w jednym wierszu :

zdanie = "Ala ma kota"
print " ".join(  [wyraz[::-1] for wyraz in zdanie.split() ])

Teraz zastanawiam się jak można to elegancko załatwić w c#. Jak na
razie napisałem to :

            string zdanie = "Ala ma kota ";
            string[] wyrazy = zdanie.Split();
            char[][] wyrazy1 = new char[wyrazy.Length][];
            for (int i = 0; i < wyrazy.Length; i++)
            {
                wyrazy1[i] = wyrazy[i].ToCharArray();
                Array.Reverse(wyrazy1[i]);
                wyrazy[i] = new string(wyrazy1[i]);
            }

            string wynik = string.Join(" ", wyrazy);
            Console.WriteLine(wynik);

działa ale mam nadzieję że da się to zrobić inaczej, chociaż w połowie
tak zgrabnie jak w Pythonie.
Pomocy.
Pozdrawiam
Arek
Re: jak to napisać w c#
#21379
Author: agend
Date: Fri, 26 Feb 2010 17:32
16 lines
1736 bytes
tak będzie trochę ładniej :

            string zdanie = "Ala ma kota";
            string wynik = "";

            foreach (string wyraz in zdanie.Split())
            {
                char[] wyraz_char = wyraz.ToCharArray();
                Array.Reverse(wyraz_char);
                wynik += new string(wyraz_char) + " ";
            }

            Console.WriteLine(wynik.TrimEnd());

Myslałem żeby użyć jakoś LINQ-a ale nie daje rady, może ktoś pomóc?
Arek
Re: jak to napisać w c#
#21380
Author: Wiktor Zychla
Date: Fri, 26 Feb 2010 18:42
27 lines
1997 bytes
> Myslałem żeby użyć jakoś LINQ-a ale nie daje rady, może ktoś pomóc?

string test = "Ala ma kota";
string reversed =
    string.Join(
        " ",
        test
            .Split()
            .Select( s => new string( 
s.ToCharArray().Reverse().ToArray() ) )
            .ToArray()
          );

gdyby istniały przeciążona sygnatura dla string.Join przyjmująca IEnumerable 
i string miał metodę Reverse, to byłoby jeszcze ładniej:

    string.Join(
        " ",
        test
            .Split()
            .Select( s => s.Reverse() )
          );

ale niestety tak dobrze nie ma.

pozdrawiam
WIktor Zychla 
Re: jak to napisać w c#
#21384
Author: Marcin Kral
Date: Fri, 26 Feb 2010 18:45
16 lines
1363 bytes
W dniu 2010-02-26 18:32, agend pisze:

> Myslałem żeby użyć jakoś LINQ-a ale nie daje rady, może ktoś pomóc?
> Arek

Tak na szybko:

	string s = "Ala ma kota";
	var x = from z in s.Split()
		select new String(z.ToCharArray().Reverse().ToArray());
		
	Console.WriteLine(String.Join(" ",x.ToArray()));

-- 
Pozdrawiam
Marcin Kral
Re: jak to napisać w c#
#21381
Author: Marcin Kral
Date: Fri, 26 Feb 2010 18:47
31 lines
1674 bytes
W dniu 2010-02-26 19:42, Wiktor Zychla pisze:
>> Myslałem żeby użyć jakoś LINQ-a ale nie daje rady, może ktoś pomóc?
>
> string test = "Ala ma kota";
> string reversed =
> string.Join(
> " ",
> test
> .Split()
> .Select( s => new string( s.ToCharArray().Reverse().ToArray() ) )
> .ToArray()
> );
>
> gdyby istniały przeciążona sygnatura dla string.Join przyjmująca
> IEnumerable i string miał metodę Reverse, to byłoby jeszcze ładniej:
>
> string.Join(
> " ",
> test
> .Split()
> .Select( s => s.Reverse() )
> );
>
> ale niestety tak dobrze nie ma.


extension metod? :)

-- 
Pozdrawiam
Marcin Kral
Re: jak to napisać w c#
#21382
Author: agend
Date: Fri, 26 Feb 2010 21:10
4 lines
1405 bytes
czapki z głów, dzięki Panowie

Pozdrawiam
Arek
Re: jak to napisać w c#
#21383
Author: Wiktor Zychla
Date: Mon, 01 Mar 2010 08:18
11 lines
1751 bytes
> extension metod? :)

nie chciałem oszukiwać, bo gdyby dopuścić extension methods, to po prostu 
napisałbym metodę realizującą ten specjalny reverse i wywołanie byłoby:

string Test = "Ala ma kota";
string rev = Test.SpecialReverse();

;)

Wiktor Zychla 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads