Έχουν δημοσιευτεί Κυριακή, 13 Απριλίου 2008 3:24 μμ από το μέλος PALLADIN

To permute or not to permute

Είναι πραγματικά εντυπωσιακό ποσο έχει αλλάξει αυτή η απλή "γλωσσούλα" που λεγόταν 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

Share


Ενημέρωση για Σχόλια

Αν θα θέλατε να λαμβάνετε ένα e-mail όταν γίνονται ανανεώσεις στο περιεχόμενο αυτής της δημοσίευσης, παρακαλούμε γίνετε συνδρομητής εδώ

Παραμείνετε ενήμεροι στα τελευταία σχόλια με την χρήση του αγαπημένου σας RSS Aggregator και συνδρομή στη Τροφοδοσία RSS με σχόλια

Σχόλια:

Χωρίς Σχόλια

Ποιά είναι η άποψή σας για την παραπάνω δημοσίευση;

(απαιτούμενο)
απαιτούμενο
προαιρετικό
απαιτούμενο
ÅéóÜãåôå ôïí êùäéêü:
CAPTCHA Image