2015-09-02 6 views
-4

Моя проблема сегодня в создании массива из существующего. Мой «родительский» массив содержит элементы с двумя символами. Элементы моего нового массива должны содержать 20 элементов из «родительского» массива.Я хочу создать новый массив из существующего

Пример:

string[] parentArray = {aa, bb, cc, df, ds, aa, zz, xx, cc, ww, fg, qq, ww, ee, 
       key: (0) (1) (2) (3) (4) (6) (7) (8) (9) (10)........ rr, dd, ss, qq, dd, ss, sa, wq, ee, rr} 
string[] childArray = {aabbccdfdsaazzxxccwwfgqqwweerrddssqqddss,.....} 
             (1) 
+4

Это звучит как задание, что вы пробовали до сих пор? –

+0

Звучит как хорошее совпадение для LINQ с 'Select':' indexes.Select (index => array [index]). ToArray() '. –

+0

FileStream fs = новый FileStream (@ "C: \ Users \ ***** \ Desktop \ textFile.txt", FileMode.Open); string [] hexx = новая строка [fs.Length]; for (int i = 0; (hexIn = fs.ReadByte())! = -1; i ++) { hexx [i] = string.Format ("{0: X2}", hexIn); } отсюда у меня есть массив, называемый hexx. Он содержит элементы, каждый из которых имеет символы. Я хочу, чтобы новый элемент массива массива был сделан 20 из этих элементов из 1-го массива. – Ch00pi

ответ

1

С некоторыми функциями расширения для перечислений вы можете пройти здесь долгий путь.

int cursor = 0; 
List<string> result = new List<string>(); 
while (cursor < parentArray.Length) 
{ 
    result.Add(String.Join("", parentArray.Skip(cursor).Take(20))); 
    cursor += 20; 
} 
string[] childArray = result.ToArray(); 

Эта функция подходит массиву, получает 20 элементов (или меньше в случае, если есть не 20 элементов слева) и объединяет их в строку и добавить эту строку в список. Я использовал метод String.Join для конкатции строки. Это хорошо работает здесь.

Функция Skip и функция Take являются функциями расширения для IEnumerable и выполняют только то, что они говорят.

EDIT: я считать, что ваш исходный массив больше и может содержать несколько блоков 20 элементов, которые должны быть перемещены в childArray

EDIT2: В случае, если у вас есть нагрузки значений в ваш parentArray, вы можете захотеть по-другому, чтобы получить дополнительную производительность. В этом случае я предлагаю использовать StringBuilder.

var builder = new Text.StringBuilder(); 
List<string> result = new List<string>(); 
for (int cursor = 0; cursor < parentArray.Length; cursor++) 
{ 
    if (builder.Length > 0 && (cursor % 20) == 0) 
    { 
     result.Add(builder.ToString()); 
     builder.Length = 0; 
    } 
    builder.Append(parentArray[cursor]); 
} 
/* At this point you can choose to add the remaining elements to the list or not. */ 
if (builder.Length > 0) 
{ 
    result.Add(builder.ToString()); 
} 
string[] childArray = result.ToArray(); 
+0

Спасибо, budy, Он отлично работает! Вы выиграли пиво;) – Ch00pi

0

Вы можете сделать цикл на родительском массива и добавить элемент внутри массива в строку, как в следующем

String str=""; 
for (int i=0;i<count(parent);i++){ 
    str+=parent[i].tostring(); 
} 

Затем сделайте новую строку массив и в первом индексе помещают переменную str ... Надеюсь, что это поможет вам, если это то, о чем просит ур.

+2

Что такое 'count()' function?! –

+0

Я предполагаю, что вы имеете в виду 'parent.Count()'? почему бы просто не использовать 'parent.Length'? –

+0

Count возвращает размер массива ... Я использую его в C#, в java есть. Длина и в php также учитываются. –

1

звуки, как будто простой LINQ-оператор будет делать то, что вам нужно:

var myArr = parent.Take(20).ToArray(); 

Это отберет 20 первых элементов вашего parent -array.

EDIT: Для того, чтобы сделать это со всеми своими элементами в пределах parent цикла своих записей:

List<string> result= new List<string>(); 
while(parent.Any()) { 
    result.Add(String.Join("", parent.Take(20).ToArray()); 
    parent = parent.Skip(20).ToArray(); 
} 

Наконец преобразовать список обратно в массив с помощью result.ToArray.

+0

Это хорошо, но мне нужно все элементы не только 1-го 20. – Ch00pi

+0

Итак, вы хотите объединить группы из 20 элементов из 'parent'-массива, правильно? – HimBromBeere

+0

Да, это правильно! – Ch00pi

Смежные вопросы