Question

i have a string that conatin 5 numbers like

'1,4,14,32,47'

i want to make from this string 5 strings of 4 number in each one

like :

 '1,4,14,32'
 '1,4,14,47'
 '1,4,32,47'
 '1,14,32,47'
 '4,14,32,47'

what is the simple/faster way to do it

is the way of convert this to array unset every time diffrent entery and combine them back to string ?

is there a simple way to do it ?

thanks

Was it helpful?

Solution

How about something like

string s = "1,4,14,32,47";
string r = String.Join(",", s.Split(',').Where((x, index) => index != 1).ToArray());

OTHER TIPS

Using string.Split() you can create a string array. Loop through it, so that in each loop iteration you indicate which element should be skipped (on the first pass, ignore the first element, on the second pass, ignore the second element).

Inside that loop, create a new array that contains all elements but the one you want to skip, then use string.Join() to create each result.

Have a look at:

http://msdn.microsoft.com/en-us/magazine/ee310028.aspx Here you'll find an example in F# who will give the correct background in combinations and permutations (that's how is called what you need). There is code too, I think it's easy to translate it in C#

Example of Code in C# (text in Italian but code in English)

For those who need a more generic algorithm, here is one which gives n length subsets of m items:

private void GetPermutations()
{
    int permutationLength = 4;
    string s = "1,4,14,32,47";
    string[] subS = s.Split(',');
    int[] indexS = new int[permutationLength];

    List<string> result = new List<string>();
    IterateNextPerm(permutationLength, indexS, subS, result);

    // Result will hold all your genberated data.
}

private void IterateNextPerm(int permutationLength, int[] pIndexes, string[] subS, List<string> result)
{
    int maxIndexValue = subS.Count() - 1;

    bool isCorrect = true;
    for (int index = 0; index < permutationLength - 1; index++)
    {
        if (pIndexes[index] >= pIndexes[index + 1])
        {
            isCorrect = false;
            break;
        }
    }

    // Print result if correct
    if (isCorrect)
    {
        string strNewPermutation = string.Empty;
        for (int index = 0; index < permutationLength; index++)
        {
            strNewPermutation += subS[pIndexes[index]] + ",";
        }
        result.Add(strNewPermutation.TrimEnd(','));
    }

    // Increase last index position
    pIndexes[permutationLength - 1]++;

    // Check and fix if it's out of bounds
    if (pIndexes[permutationLength - 1] > maxIndexValue)
    {
        int? lastIndexIncreased = null;

        // Step backwards and increase indexes
        for (int index = permutationLength - 1; index > 0; index--)
        {
            if (pIndexes[index] > maxIndexValue)
            {
                pIndexes[index - 1]++;
                lastIndexIncreased = index - 1;
            }
        }

        // Normalize indexes array, to prevent unnecessary steps
        if (lastIndexIncreased != null)
        {
            for (int index = (int)lastIndexIncreased + 1; index <= permutationLength - 1; index++)
            {
                if (pIndexes[index - 1] + 1 <= maxIndexValue)
                {
                    pIndexes[index] = pIndexes[index - 1] + 1;
                }
                else
                {
                    pIndexes[index] = maxIndexValue;
                }
            }
        }
    }

    if (pIndexes[0] < maxIndexValue)
    {
        IterateNextPerm(permutationLength, pIndexes, subS, result);
    }
}

I know that it's not the nicest coding, but I've written it right now in the last half an hour so I'm sure there are things to tweek there.

Have fun coding!

var elements = string.Split(',');

var result =
Enumerable.Range(0,elements.Length)
.Reverse()
.Select(
 i=>
  string.Join(","
   Enumerable.Range(0,i).Concat(Enumerable.Range(i+1,elements.Length - i - 1))
   .Select(j=>elements[j]).ToArray() // This .ToArray() is not needed in NET 4
  )
).ToArray();

your wording is pretty confusing...but the example is clear enough. just split it on commas, then remove one index, then use string.Join(",", list); to put it back together..

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top