Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 удалить элемент массива  [new]
Sandist
Member

Откуда:
Сообщений: 451
привет, оч прошу помогите с удалением элемента массива
мне нужно удалить элементы которые равны "", я постарался написать
For i As Integer = 0 To m_Array.Length - 1
       if m_Array(i) ="" Then
                  System.Array.Clear(m_Array, i, 1)
       end if
     Next

но блин не удается никак, выводит хрень какую-то
вот в эту функцию нужно добавить такой код
Public Shared Function RemoveDuplicates(m_Array As Object()) As String()

    System.Array.Sort(m_Array)

    For i As Integer = 0 To m_Array.Length - 1
       if m_Array(i) ="" Then
                  System.Array.Clear(m_Array, i, 1)
       end if
     Next

    Dim k As Integer = 0
    For i As Integer = 0 To m_Array.Length - 1
        If i > 0 AndAlso m_Array(i).Equals(m_Array(i - 1)) Then
            Continue For
        End If
        m_Array(k) = m_Array(i)
        k += 1
    Next

    Dim unique As [String]() = New [String](k - 1) {}

    System.Array.Copy(m_Array, 0, unique, 0, k)

    Return unique

End Function


Модератор: Тема перенесена из форума "Visual Basic".


Сообщение было отредактировано: 31 май 21, 16:56
31 май 21, 16:58    [22329432]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22381
Sandist
System.Array.Clear(m_Array, i, 1)
1) А с чего вы вообще решили, что этот метод удаляет элемент массива?
    //
    // Summary:
    //     Sets a range of elements in an array to the default value of each element type.

    public static void Clear(Array array, int index, int length);


2) А чем не нравятся какие-то простые решения типа .Distinct() из Linq?
31 май 21, 17:09    [22329444]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Sandist
Member

Откуда:
Сообщений: 451
Shocker.Pro,
спасибо за ответ, мне бы понравилось, да знаний не хватает. Мне нужно для SSRS из набора данных получить уникальные значения по условию
реализация общая такая:
=Join(Code.RemoveDuplicates
	(LookupSet
		(1, 1, IIF(Fields!Транзакция_УслугаВидАнг.Value = "Transfer",Fields!ФинДок_СводнаяНакладнаяНомер.Value,""),"Report"
                )
         ),","
     )

и тут я натолкнулся на необходимость получения distinct значений, нашел в инете пример (тот который вы ставите под сомнение)
из-за условия у меня появляется пустой элемент который я хотел удалить

возможно я вообще что-то делаю неправильно, если так подскажите пожалуйста как правильно
31 май 21, 17:14    [22329449]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22381
В общем случае
MyNewArray = MyArray.Distinct().ToArray()

а дальше нюансы, связанные со сравнением элементов. Тут не очень понятно, почему на входе массив объектов? Что реально лежит в массиве, какого типа элементы?
31 май 21, 17:25    [22329452]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Sandist
Member

Откуда:
Сообщений: 451
Sandist,

поля из query видимо
подскажите пожалуйста как удалить элемент из массива, что мне нужно написать чтобы я удалить все элементы которые равны ""?
31 май 21, 17:29    [22329453]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22381
Еще раз.
Какая задача стоит?
Удалить элемент из массива (нельзя просто взять и удалить элемент из массива, массив так устроен) или нужно получить массив уникальных значений (для этого не требуется удалять элементы из массива)
31 май 21, 17:34    [22329454]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Sandist
Member

Откуда:
Сообщений: 451
Shocker.Pro,

у меня в массиве есть элементы которые имеют значение "A", я хочу удалить все элементы массива которые равны "A"
я правильно понимаю, что у System.Array нет готового решения и я должен перебрать все элементы которые не равно "A" в новый массив и затем уже работать с ним?
31 май 21, 17:39    [22329456]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22381
Sandist
у меня в массиве есть элементы которые имеют значение "A", я хочу удалить все элементы массива которые равны "A"

MyNewArray = MyArray.Where(n => n != "A").ToArray()

(это синтаксис на C#)
31 май 21, 17:42    [22329457]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22381
Sandist
System.Array нет готового решения и я должен перебрать все элементы
Для того чтобы работать с данными в .NET есть сотни различных примочек, начиная от обёртки List над массивом и заканчивая мощнейшей библиотекой Linq. Напрямую с массивами в .NET работают достаточно редко, и уж конечно никто не перебирает их вручную.
31 май 21, 17:44    [22329458]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22381
Shocker.Pro
(это синтаксис на C#)
на VB.NET это будет так
MyNewArray = MyArray.Where(Function(n) n <> "A").ToArray()
если верить конвертеру
31 май 21, 17:46    [22329460]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Sandist
Member

Откуда:
Сообщений: 451
Shocker.Pro,
а как сделать на VB?
31 май 21, 17:48    [22329462]     Ответить | Цитировать Сообщить модератору
 Re: удалить элемент массива  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22381
см. выше.
И еще, если по факту массив состоит из строк, но объявлен как массив объектов, нужно предварительно сделать Cast
MyNewArray = MyArray.Cast(Of String)().Where(Function(n) n <> "A").ToArray()
31 май 21, 17:50    [22329466]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить