Как сопоставить значения в двух массивах разной длины, возможно, не отсортированных - PullRequest
0 голосов
/ 09 марта 2011

Я хочу сравнить одно значение со всеми значениями в другом массиве и выявить совпадение. Они разные по длине.

Представьте себе один столбец несортированных идентификаторов и один столбец идентификаторов и имен. Я придумал это, но это не работает.

private function mergeCollections():void
            {   
                for (var k:int = 0;k <= idArray.length;k++)
                { 

                    for(var i:int = 0; i <= namesArray.length;i++){
                        if(idArray[k].id == namesArray[i].id){

                            idArray[k].name = namesArray[i].name;

                        }
                    }
                }
            }

Это то, что я хочу решить:

Array Coll idArray = [{3}{" "},
                      {1}{" "},
                      {2}{" "}] 

Array Coll namesArray[{1}{Name1},
                      {2}{Name2},
                      {3}{Name3},
                      {4}{Name4}]

Result =

idArray = [{3}{Name3},
           {1}{Name1},
           {2}{Name2}]

Извините, если синтаксис неправильный, мои коллекции массивов поступают из базы данных.

Реальная вещь, которую я здесь делаю, это получение значений из таблицы, полной идентификаторов, и таблицы, полной этих идентификаторов, плюс имя (они разделены, потому что, чувак нормализации!) И я хочу поместить их в сетку данных это будет только отображать имя.

Я говорю, что возможно не отсортировано, потому что второй столбец может достигнуть точки нескольких удалений и вставок и может оказаться несортированным. Но для этого случая у меня есть один несортированный столбец против одного отсортированного столбца.

Мой текущий вывод - только одно напечатанное имя, а остальные полностью отклонены.

ПРИМЕЧАНИЕ. Также учтите, что nameArray всегда имеет значения MORE или EQUAL для таблицы идентификаторов. и в таблице Id всегда будут значения, соответствующие таблице имен.

1 Ответ

1 голос
/ 10 марта 2011

Кроме использования <=, а не <, я не уверен, что не так с вашим кодом, жаль, что вы не говорите, что вывод. Я написал это, почти идентично тому, что вы сделали: </p>

var arr1:ArrayCollection = new ArrayCollection([{id:1, name:""}, {id:2, name:""}, {id:3, name:""}]);
var arr2:ArrayCollection = new ArrayCollection([{id:1, name:"1"}, {id:3, name:"3"}, {id:2, name:"2"}, {id:4, name:"4"}]);
for (var i:int=0; i<arr1.length; i++)
{
    for (var j:int=0; j<arr2.length; j++)
    {
        if (arr1[i].id==arr2[j].id)
        {
            arr1[i].name = arr2[j].name;
            trace(arr1[i].id,arr1[i].name);
        }
    }
}

И, похоже, делает свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...