2011-12-22 2 views
-4

Как разбить массив типа строки одинаково на несколько массивов.
например.
string [] input = {"a", "b", "c", "", "d", "e", "f"}
динамически установить {string [] output = "a", "b" , "с", "" // первый раз строка [] = выход "д", "е", "F", "" // второй timetime}Сплит-массив в C#

+2

Что вы пробовали? С чем вы с тобой сталкиваетесь? – Oded

+3

Magic 8-ball говорит «Длина» и «Подстрока», но он может также сказать «Это может случиться» ... –

+1

Я думаю, что OP просит алгоритм, который он может применить к любому случаю, когда у вас есть строки, которые могут разделить на несколько различных конфигураций (составные части различной длины). Я думаю, что это более глубокий вопрос, чем вы предполагаете. –

ответ

1
String[] splitString(int len, string input) 
{ 
    int idx = 0; 
    List<string> ret = new List<string>(); 
    while(idx < input.Length) 
    { 
    if (idx+len > input.Length) 
     ret.Add(input.Substring(idx)); 
    else 
     ret.Add(input.Substring(idx,len)); 
    idx+=len; 
    } 
    return ret.ToArray(); 
} 
+1

Вы не внимательно прочитали вопрос. Учитывая, что в качестве входных данных используется строка, вам нужно получить подстроки, которые являются длиной числа. – Oded

+0

@Однако да, вы правы. Я принял свой ответ – Matten

1

Некоторое время назад я реализовал Enumerable#each_slice от Ruby in C#, и, похоже, вы можете использовать это, чтобы получить то, что хотите.

static class ExtentionsMethods 
{ 
    public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> seq, int size) 
    { 
     while (seq.Any()) 
     { 
      yield return seq.Take(size); 
      seq = seq.Skip(size); 
     } 
    } 
} 

Тогда вы просто

var str = "1234567890"; 
var res = str.Split(5); 

, но так как результат является IEnumerable из IEnumerable<char> вы можете также

var arr = res.Select(c => String.Join("", c)).ToArray(); 

, чтобы получить

обр {строка [2]}
[0]: "12345"
[1]: "67890"