2015-07-18 1 views
6

Добрый день, у меня есть AC# зазубренный массив с истинными и ложными значениями (или 0 и 1), и я хочу поменять местами значения, как:Как инвертировать значения логического зубчатого массива в C#?

1 1 1 1 
0 1 1 0 
1 1 1 1 
1 0 0 1 

к стали:

0 0 0 0 
1 0 0 1 
0 0 0 0 
0 1 1 0 

Есть простой способ сделать это, не зацикливая его? что-то вроде! myJaggedArray ??

ответ

12

Там нет встроенной операции инвертирования массива, как это, но вы можете использовать LINQ сделать инверсию без явных петель:

var res = myJaggedArray.Select(a => a.Select(n => 1-n).ToArray()).ToArray(); 

1-n трюк - это обычный способ замены нулей на те, и на нули без использования условного исполнения.

+0

Спасибо вам всем! – Nauzet

+6

nice '1-n' trick :) –

+0

Что вы, ребята, думаете, будет быстрее работать с (lopps, operations и т. Д.), Bool [] [] или int [] []? как насчет битрейтов? – Nauzet

8

Нет встроенной функции, но вы можете использовать LINQ.

int[][] input = new[] 
{ 
    new[] { 1, 1, 1, 1 }, 
    new[] { 0, 1, 1, 0 }, 
    new[] { 1, 1, 1, 1 }, 
    new[] { 1, 0, 0, 1 } 
}; 
int[][] output = input.Select(row => row.Select(value => value == 1 ? 0 : 1).ToArray()).ToArray(); 

Для логических значений:

bool[][] input = new[] 
{ 
    new[] { true, true, true, true }, 
    new[] { false, true, true, false }, 
    new[] { true, true, true, true }, 
    new[] { true, false, false, true } 
}; 
bool[][] output = input.Select(row => row.Select(value => !value).ToArray()).ToArray(); 
+0

Спасибо вам всем! – Nauzet

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

  • Нет связанных вопросов^_^