У меня есть строковый массив Array1 и строковый массив A2. Я хочу объединить их в 3-й массив A3, но исключая повторяющиеся значения. Можно ли это сделать с помощью лямбда-выражений или только путем перебора массива и проверки array.Contains ()?

2
MC. 25 Янв 2010 в 22:17

3 ответа

Лучший ответ

Вы можете сделать следующее

Dim newArray = array1.Union(array2).Distinct().ToArray()

Для этого требуется Visual Studio 2008 или выше (VB.Net 9.0).

0
JaredPar 25 Янв 2010 в 22:30
Вам также понадобится ссылка (не уверен, что в VB она называется так же, я использую C #) на Linq.
 – 
BarrettJ
25 Янв 2010 в 22:22
@BarretJ, в 2008 году он добавлен как импорт на уровне проекта, поэтому он уже должен быть там
 – 
JaredPar
25 Янв 2010 в 22:24
1
Разве в Distinct () нет только двух перегрузок? Нет параметров и 1, требующий IEqualityComparer
 – 
Keith Rousseau
25 Янв 2010 в 22:28
Спасибо, это работает. Я считаю, что Distinct здесь не нужен, поскольку Union уже возвращает уникальные значения.
 – 
MC.
25 Янв 2010 в 22:45
array1.Union(array2).Distinct().ToArray();
1
Keith Rousseau 25 Янв 2010 в 22:26
    public static Expression<Func<T, TResult>> And<T, TResult>(this Expression<Func<T, TResult>> expr1, Expression<Func<T, TResult>> expr2)
    {
        var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, TResult>>(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
    }

    public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
    {
        var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
        return Expression.Lambda<Func<T, bool>>(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
    }
0
suneelsarraf 22 Апр 2014 в 12:44