Έχουν δημοσιευτεί
Κυριακή, 13 Απριλίου 2008 3:24 μμ
από το μέλος
PALLADIN
Είναι πραγματικά εντυπωσιακό ποσο έχει αλλάξει αυτή η απλή "γλωσσούλα" που λεγόταν C#...
Έχουν περάσει ανεπιστρεπτί οι εποχές που η C# ήταν απλά ένα java clone. Πλέον, ο C# κώδικας μπορεί να προκαλέσει πονοκέφαλο ακόμα και στους πιο έμπειρους Java coders.
Σήμερα για παράδειγμα, χρειάστηκε να βρω όλες τις αναδιατάξεις ενός συνόλου...
Μετά από μιση ώρα πειραματισμού κατέληξα σε αυτό...
static IEnumerable<T> Concat<T>(this T head, IEnumerable<T> tailItems)
{
yield return head;
foreach (var item in tailItems)
yield return item;
}
static IEnumerable<T> AllExcept<T>(this IEnumerable<T> items, int skipIndex)
{
return items.Where((item, index) => index != skipIndex);
}
static IEnumerable<IEnumerable<T>> Permute<T>(this IEnumerable<T> values, int count)
{
if (count == 0)
return new List<IEnumerable<T>> { new List<T>() };
else
return from headIndexPair in values.Select((item, index) => new { Item = item, Index = index })
from tailRemainder in Permute(values.AllExcept(headIndexPair.Index), count - 1)
select headIndexPair.Item.Concat(tailRemainder);
}
static void Main(string[] args)
{
foreach (var list in new[] {1, 2, 3}.Permute(3))
{
foreach (var item in list)
Console.Write("{0}", item);
Console.WriteLine();
}
}
Forgive me father for I have sinned