#c# #.net #algorithm
#c# #.net #алгоритм
Вопрос:
У меня есть класс:
class All{
A a;
B b;
C c;
}
Теперь я получаю 3 массива:
A[] as;
B[] bs;
C[] cs;
Каждый из них может быть пустым (длина = 0) или нулевым.
Мне нужно создать список всех объектов, состоящий из массивов, в которых есть хотя бы один элемент (мне не нужен пустой объект).
For example:
A[] as={a1, a2};
B[] bs{};
C[] cs{c1, c2};
=> Result: All[] = {
All{a: a1, b:null, c:null},
All{a: a1, b:null, c:c1},
All{a: a1, b:null, c:c2},
All{a: a2, b:null, c:null},
All{a: a2, b:null, c:c1},
All{a: a2, b:null, c:c2}
All{a: null, b:null, c:c1},
All{a: null, b:null, c:c2}
//All{a: null, b:null, c:null} -> This is an empty object and I don't need it
};
Как я могу сгенерировать All[]?
Ответ №1:
Это то, что вы ищете? (возможно, вам придется немного отполировать)
List<A> awithnull = as.ToList();
List<B> bwithnull = bs.ToList();
List<C> cwithnull = cs.ToList();
awithnull.Add(null);
bwithnull.Add(null);
cwithnull.Add(null);
var result = from ae in awithnull
from be in bwithnull
from ce in cwithnull
where (!(ae==null amp;amp; be ==null amp;amp; ce == null))
select new All() {a = ae, b = be, c = ce};
Комментарии:
1. Спасибо! Если бы я мог — я бы принял оба ваших ответа. Но BrokenGlass был первым. 1
Ответ №2:
Учитывая это определение Alls
:
class All
{
public A A { get; set; }
public B B { get; set; }
public C C { get; set; }
}
Что-то вроде этого должно сработать:
A[] myAs = new [] { new A(), new A(), new A()};
B[] myBs = new B[] {};
C[] myCs = new [] {new C(), new C()};
var combinations = (from a in myAs.Concat(new A[] { null })
from b in myBs.Concat(new B[] { null })
from c in myCs.Concat(new C[] { null })
where (!(a == null amp;amp; b == null amp;amp; c == null))
select new All() { A = a, B = b, C = c }).ToArray();
Комментарии:
1. Это не включает null в комбинацию?
2. @manojlds: он включает комбинации, в которых не более любых двух из a, b, c равны нулю, но не все три равны нулю.
3. Смотрите мой ответ. Он ожидает, что
null
будет частью элементов, которые будут взяты в комбинации.4. @manojlds: это всего лишь вопрос того, что вы помещаете в массивы A, B, C, но это не меняет решения
5. Как? Например, ваш будет выдавать {a1, b1, c1} {a1, b1, c2} и т.д. но никогда {a1,null, c2} или {a1,null, null} и т.д., Если какой-либо из a, b или c не является пустым.
Ответ №3:
использовать объявление объекта:
Object[] All;
Вы можете вставлять любые объекты, включая все созданные вами классы.
Комментарии:
1. Я полагаю, вы не поняли мой вопрос. Все состоят из A, B и C, и я хочу создать массив Alls, который содержит любую возможность A, B и C.