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#
Author: agend
Date: Fri, 26 Feb 2010 15:47
Date: Fri, 26 Feb 2010 15:47
32 lines
2227 bytes
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#
Author: agend
Date: Fri, 26 Feb 2010 17:32
Date: Fri, 26 Feb 2010 17:32
16 lines
1736 bytes
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#
Author: Wiktor Zychla
Date: Fri, 26 Feb 2010 18:42
Date: Fri, 26 Feb 2010 18:42
27 lines
1997 bytes
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#
Author: Marcin Kral
Date: Fri, 26 Feb 2010 18:45
Date: Fri, 26 Feb 2010 18:45
16 lines
1363 bytes
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#
Author: Marcin Kral
Date: Fri, 26 Feb 2010 18:47
Date: Fri, 26 Feb 2010 18:47
31 lines
1674 bytes
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#
Author: agend
Date: Fri, 26 Feb 2010 21:10
Date: Fri, 26 Feb 2010 21:10
4 lines
1405 bytes
1405 bytes
czapki z głów, dzięki Panowie Pozdrawiam Arek
Re: jak to napisać w c#
Author: Wiktor Zychla
Date: Mon, 01 Mar 2010 08:18
Date: Mon, 01 Mar 2010 08:18
11 lines
1751 bytes
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