Вход

Просмотр полной версии : Помогите с "формулировкой" и выборкой из массива.


ccwds
08.05.2007, 17:14
Есть большой массив типа:

{id:1,numbers:2,3,2};
{id:2,numbers:4,1};
{id:3,numbers:5,1,2,3};
{id:4,numbers:4,4,5};
{id:5,numbers:5,1,1,1,2};

Не уверен, что правильно написал :wacko: , но смысл, что есть порядковый номер id и для каждого порядкового номера есть numbers - массивчик из произвольно расположенных цифр от 1 до 5, минимум две цифры, максимум 5.

Как правильно мне создать с этим хозяйством массив и как скомандовать этому массиву "а покажи мне по порядку id , где в numbers содержится, к примеру, хоть одна цифра 2"?

screamge
08.05.2007, 17:30
можно так, хотя возможно есть способ лучше


var ar1:Array = new Array (2, 3, 2)
var ar2:Array = new Array (4, 1)
var ar3:Array = new Array (5, 1, 2, 3)
var ar4:Array = new Array (4, 4, 5)
var ar5:Array = new Array (5, 1, 1, 1, 2);

for (i = 1; i <=5; i++){
for (j = 0; j <= 5; j++){
if (this["ar" + i][j] == 2){
trace (i) // выводит 1, 1, 3, 5
}
}
}

BigDan
08.05.2007, 18:05
Лучше так делать:

var my_arr:Array = new Array();
my_arr[0] = {id:1,numbers:[2,3,4]};
......

screamge
08.05.2007, 18:08
ar1 = [2, 3, 2]
ar2 = [4, 1]
ar3 = [5, 1, 2, 3]
ar4 = [4, 4, 5]



если речь о сокращении идёт, в другом я не вижу превосходства.

ccwds
08.05.2007, 18:18
Спасибо! Понял!
Я только добавил break, может, это и не оптимально, но тогда выводит id, не повторяясь при нескольких нахождениях одинаковой цифры.


var ar1:Array = new Array (2, 3, 2)
var ar2:Array = new Array (4, 1)
var ar3:Array = new Array (5, 1, 2, 3)
var ar4:Array = new Array (4, 4, 5)
var ar5:Array = new Array (5, 1, 1, 1, 2);

for (i = 1; i <=5; i++){
for (j = 0; j <= 5; j++){
if (this["ar" + i][j] == 2){
trace (i) // выводит 1, 3, 5
break;
}
}
}

screamge
08.05.2007, 18:21
break всёже удобнее ещё одного условия:)

iNils
08.05.2007, 18:23
var array:Array = [[], [2, 3, 2], [4, 1], [5, 1, 2, 3], [4, 4, 5], [5, 1, 1, 1, 2]];
for (var i:Number = 0; i < array.length; i++) {
if (array[i].toString ().indexOf (2) >= 0) {
trace (i);
}
}

screamge
08.05.2007, 18:24
оптимальнее способ нашёлся, только вот с масивом хрен разберёшься что к чему))

BigDan
08.05.2007, 18:25
var arr:Array = new Array();
arr[0] = {id:1,numbers:[1,2,3]};
arr[1] = {id:2,numbers:[2,3,4]};
arr[2] = {id:3,numbers:[3,4,5]};
arr[3] = {id:4,numbers:[4,5,6]};
for(var i=0;i<=arr.length-1;i++){
for(var j=0;j<=arr[i].numbers.length-1;j++){
if(arr[i].numbers[j] == 2){
trace(arr[i].id);
}
}
}
Этот вариант удобней.

iNils
08.05.2007, 18:26
А если в numbers будет по 100 цифр, вы все собираетесь их обходить?

screamge
08.05.2007, 18:28
и зачем дублировать номер массива с его id? совершенно лишний труд при большом кол-ве массивов

BigDan
08.05.2007, 18:30
А если в numbers будет по 100 цифр, вы все собираетесь их обходить?
Уже обсуждали, что можно использовать break или continue, это сократит перебор.

BigDan
08.05.2007, 18:31
и зачем дублировать номер массива с его id? совершенно лишний труд при большом кол-ве массивов
так мызнаем точное количество массивов numbers

iNils
08.05.2007, 18:31
Уже обсуждали, что можно использовать break или continue, это сократит перебор.
Ну-ну. Ставим 2-ку в конец ряда или вообще не ставим и проход по всей сотне обеспечен.

screamge
08.05.2007, 18:34
так мызнаем точное количество массивов numbers


а без id мы не можем знать их точное количество?

BigDan
08.05.2007, 18:34
Но, у него всеравно не 100 цифр, а всего лиш - 5.

а без id мы не можем знать их точное количество?
как ты подсчитаешь их количество, если их так перечислять:
arr1
arr2
arr3
arr4
....

screamge
08.05.2007, 18:38
а как твой ответ связан с моим вопросом про id?

Kikasso
09.05.2007, 01:56
var array:Array = [
[],
[2, 3, 2],
[4, 1, 222],
[5, 1, 2, 3],
[4, 4, 5],
[5, 1, 1, 1, 2]
];
for (var i:Number = 0; i < array.length; i++) {
var str = ',' + array[i].join(',') + ',';
if( str.indexOf (',2,') >= 0) {
trace (i);
}
}
Простота бывает обманчива..

iNils
09.05.2007, 12:59
Простота бывает обманчива..
Читаем условия задачи:
а покажи мне по порядку id , где в numbers содержится, к примеру, хоть одна цифра 2?Знаешь чем цифра от числа отличается?

Kikasso
09.05.2007, 23:05
Что такое цифра во флеше, Number или String?
Можно рассматривать цифру как положительное целое число в диапазоне от 0 до 9, т.е. Number, тем более что ищем в массиве "numbers".
Можно рассматривать цифру как буковку, из которых составляются числа, т.е. String, и с этим не поспоришь.

etc
10.05.2007, 01:03
Цифра — это целое число от 0 до 9.

Kikasso
10.05.2007, 01:44
Цифра — это целое число от 0 до 9.
Давайте посмотрим, так ли это:
function checkIt( n:Number ):Void{
trace ( n + ( 0<= n && n <=9 && (Math.floor(n) == n) ? "" : " не" ) + " цифра" );
}
checkIt( 8 );// 8 цифра
checkIt( 10 );// 10 не цифра
checkIt( 010 );// 8 цифра
:quiet:
Так что цифра - это не число. Это, если можно так выразиться, "буква" для написания чисел. Так что формально iNils прав..
Ну а автору надо подумать, если в массиве есть число 12, это наш клиент или нет?
С восьмеричным числом я немного загнул, конечно, вряд ли кто-нибудь будет так писать.

etc
10.05.2007, 01:46
Для начала такие понятия, как «цифра» и «число» не объясняют на примере флеша :D