Удалить двойные значения из массива классического ASP - PullRequest
1 голос
/ 06 июля 2011

Если бы у меня был массив, такой как -

array(0) = 85
array(1) = 85
array(2) = 53
array(3) = 203
array(4) = 85

Как создать новый массив без двойных значений? поэтому массив будет

array(0) = 85
array(1) = 53
array(2) = 203

Ответы [ 4 ]

2 голосов
/ 10 июля 2012

Я знаю, что это старый вопрос, но недавно я столкнулся с тем же сценарием, где мне нужно удалить избыточные объекты из массива.Я искал ТАК, но не нашел ни одного простого способа сделать то же самое. После поиска я получил простой метод на Эй, Сценарист!Блог .

С эта ссылка

Set objDictionary = CreateObject("Scripting.Dictionary")

arrItems = Array("a","b","b","c","c","c","d","e","e","e")

For Each strItem in arrItems
  If Not objDictionary.Exists(strItem) Then
      objDictionary.Add strItem, strItem   
  End If
Next

intItems = objDictionary.Count - 1

ReDim arrItems(intItems)

i = 0

 For Each strKey in objDictionary.Keys
   arrItems(i) = strKey
   i = i + 1
 Next

For Each strItem in arrItems
   Wscript.Echo strItem
 Next

Надеюсь, это поможет кому-то

1 голос
/ 06 июля 2011

Использование функции из мой ответ на ваш предыдущий вопрос с тестовым кодом типа

  Dim aA   : aA   = Split( "85 459 459 90 85 85 85" )
  Dim aRes : aRes = diffArray( aA, Array() )
  WScript.Echo "A  :", Join( aA )
  WScript.Echo "UNI:", Join( aRes( 0 ) ), "settifieds"

дает вам:

A  : 85 459 459 90 85 85 85
UNI: 85 459 90 settifieds
0 голосов
/ 06 июля 2011

Вы также можете сделать это в n log n, если сортируете массив.

0 голосов
/ 06 июля 2011

Я не знаю, есть ли в vbs функция для удаления дублирующего элемента из массива. Если он не существует, вы можете использовать следующее. Может быть проблема с синтаксисом, но вы можете использовать стратегию

length=5
    newLength=1
    for i=0 to length-1

      for j=0 to newLength-1
      if(array(i)=array(j)) then
    exit For
    end if
      next
      if(j=newLength) then
    array(newLenth++)=array(i);
    end if

    next
...