Rearrange Strings in C #

I have 5 lines, such as: “one,” “two,” “three,” “four,” and “five.” I need to get all permutations of these lines. I have studied all Internet resources, but all decisions are so cumbersome, and it is difficult for me to understand this and integrate it into my program.
So, maybe you know some simple solution how to get permutations.

+3
source share
6 answers

The permutations are very simple.

/// <summary> /// Returns all permutations of the input <see cref="IEnumerable{T}"/>. /// </summary> /// <param name="source">The list of items to permute.</param> /// <returns>A collection containing all permutations of the input <see cref="IEnumerable&lt;T&gt;"/>.</returns> public static IEnumerable<IEnumerable<T>> Permutations<T>(this IEnumerable<T> source) { if (source == null) throw new ArgumentNullException("source"); // Ensure that the source IEnumerable is evaluated only once return permutations(source.ToArray()); } private static IEnumerable<IEnumerable<T>> permutations<T>(IEnumerable<T> source) { var c = source.Count(); if (c == 1) yield return source; else for (int i = 0; i < c; i++) foreach (var p in permutations(source.Take(i).Concat(source.Skip(i + 1)))) yield return source.Skip(i).Take(1).Concat(p); } 
+16
source
 using System.Collections.Generic; using System.Linq; namespace caComb { class Program { private static List<List<string>> allCombinations = new List<List<string>>(); static void Main(string[] args) { string[] words = new string[] { "one", "two", "three", "four", "five" }; List<string> temp = new List<string>(); GetCombinations(words, temp); // Here you can read all combinations from // allCombinations. Do whatever you want. } private static void GetCombinations(string[] words, List<string> temp) { if (temp.Count == words.Length) { List<string> clone = temp.ToList(); if (clone.Distinct().Count() == clone.Count) { allCombinations.Add(clone); } return; } for (int i = 0; i < words.Length; i++) { temp.Add(words[i]); GetCombinations(words, temp); temp.RemoveAt(temp.Count - 1); } } } } 
+1
source

Here is a class that works in .Net 2.0. Sort the array first. Then use it by going to while (Permute.Next (array)). When there are no more permutations, Permute.Next returns false.

 using System; using System.Collections.Generic; using System.Text; public class Permute { public static bool Next(IList<IComparable> list) { int k = FindSmallestK(list); if (k < 0) return false; int l = FindLargestL(list, k); Swap(list, k, l); Reverse(list, k + 1); return true; } private static void Reverse(IList<IComparable> list, int p) { for (int i = p, j = list.Count - 1; i < j; i++, j--) { Swap(list, i, j); } } private static void Swap(IList<IComparable> list, int k, int l) { IComparable temp = list[k]; list[k] = list[l]; list[l] = temp; } private static int FindLargestL(IList<IComparable> list, int k) { for (int i = list.Count - 1; i > k; i--) { if (list[k].CompareTo(list[i]) < 0) return i; } return -1; } private static int FindSmallestK(IList<IComparable> list) { for (int i = 0; i < list.Count - 1; i++) { if (list[i].CompareTo(list[i + 1]) < 0) return i; } return -1; } } 
+1
source

This article shows the complete code for getting all permutations of letters. Replace the letters with the words and you have a solution:

http://www.codeproject.com/KB/recipes/Premutations.aspx

0
source

The Wikipedia permutation article has a good summary of some example algorithms.

http://en.wikipedia.org/wiki/Permutation#Systematic_generation_of_all_permutations

0
source

This is a pretty good combinatorics library - http://www.codeproject.com/KB/recipes/Combinatorics.aspx

0
source

Source: https://habr.com/ru/post/946457/


All Articles