Как найти номер строки массива

Here’s an array:

var array = new Array();
array[0] = "sound1.mp3"
array[1] = "sound2.mp3"
array[2] = "sound3.mp3"

In a function that I’ve written, I need to get the string’s order number.

Here’s what I’ve got so far:

function registerSound(array, i) {
    var arrno = ???;
    var arrurl = array[i];

    soundManager.createSound({ id: 'sound' + arrno, url: arrurl });
}

function processArray(array) {;
    for(i=1; i<array.length; i++) {
         registerSound(array, i);
    }
}

The arrno variable should have the order number of "sound2.mp3" (in this case 1). It needs to be set up so that, when the for statement turns to the next string in the array, the arrno variable will contain the order number of "sound3.mp3" (2).

Thanks very much in advance!

asked Jul 24, 2012 at 15:20

Adam's user avatar

5

function registerSound(array, i) {
    var arrurl = array[i];
    soundManager.createSound({
        id: 'sound' + i,
        url: arrurl
    });
}

Also, declare your variables and start your loop from 0:

function processArray(array) {;
    for (var i = 0; i < array.length; i++) {
        registerSound(array, i);
    }
}

answered Jul 24, 2012 at 15:32

Esailija's user avatar

EsailijaEsailija

138k23 gold badges271 silver badges326 bronze badges

2

#include <iostream>

using namespace std;


int main()
{
const int rows = 92;
const int cols = 8;


 int m;
 int i;
 int j;
 int sbd;

int **arr = new int* [rows];

for (int i = 0; i < rows; i ++)
{
    arr[i] = new int [cols];
}



for (int i = 0; i < rows; i ++)
{
    for (int j = 0; j < cols; j ++)
    {
        cin >> arr [i][j];
    }
} 


for (int a = 0; a < 1; a ++)
{
for (int b = cols - 1; b >= 0; b --)
{  
    sbd = arr [a][b];
for (int j = 0; j < cols; j ++)
{
for (int i = 0; i < rows; i ++)
{
    if (arr [i][j] == sbd)
    {
        m = i + 1;
    }
}
}
}    
cout << m << " ";
}
cout << endl;  

for (int i = 0; i < rows; i++)
{
  delete[]arr[i];
} 
delete[]arr;
return 0;
}

Вводимый массив:

1 5 8 6 3 7 2 4 
1 6 8 3 7 4 2 5 
1 7 4 6 8 2 5 3 
1 7 5 8 2 4 6 3 
2 4 6 8 3 1 7 5 
2 5 7 1 3 8 6 4 
2 5 7 4 1 8 6 3 
2 6 1 7 4 8 3 5 
2 6 8 3 1 4 7 5 
2 7 3 6 8 5 1 4 
2 7 5 8 1 4 6 3 
2 8 6 1 3 5 7 4 
3 1 7 5 8 2 4 6 
3 5 2 8 1 7 4 6 
3 5 2 8 6 4 7 1 
3 5 7 1 4 2 8 6 
3 5 8 4 1 7 2 6 
3 6 2 5 8 1 7 4 
3 6 2 7 1 4 8 5 
3 6 2 7 5 1 8 4 
3 6 4 1 8 5 7 2 
3 6 4 2 8 5 7 1 
3 6 8 1 4 7 5 2 
3 6 8 1 5 7 2 4 
3 6 8 2 4 1 7 5 
3 7 2 8 5 1 4 6 
3 7 2 8 6 4 1 5 
3 8 4 7 1 6 2 5 
4 1 5 8 2 7 3 6 
4 1 5 8 6 3 7 2 
4 2 5 8 6 1 3 7 
4 2 7 3 6 8 1 5 
4 2 7 3 6 8 5 1 
4 2 7 5 1 8 6 3 
4 2 8 5 7 1 3 6 
4 2 8 6 1 3 5 7 
4 6 1 5 2 8 3 7 
4 6 8 2 7 1 3 5 
4 6 8 3 1 7 5 2 
4 7 1 8 5 2 6 3 
4 7 3 8 2 5 1 6 
4 7 5 2 6 1 3 8 
4 7 5 3 1 6 8 2 
4 8 1 3 6 2 7 5 
4 8 1 5 7 2 6 3 
4 8 5 3 1 7 2 6 
5 1 4 6 8 2 7 3 
5 1 8 4 2 7 3 6 
5 1 8 6 3 7 2 4 
5 2 4 6 8 3 1 7 
5 2 4 7 3 8 6 1 
5 2 6 1 7 4 8 3 
5 2 8 1 4 7 3 6 
5 3 1 6 8 2 4 7 
5 3 1 7 2 8 6 4 
5 3 8 4 7 1 6 2 
5 7 1 3 8 6 4 2 
5 7 1 4 2 8 6 3 
5 7 2 4 8 1 3 6 
5 7 2 6 3 1 4 8 
5 7 2 6 3 1 8 4 
5 7 4 1 3 8 6 2 
5 8 4 1 3 6 2 7 
5 8 4 1 7 2 6 3 
6 1 5 2 8 3 7 4 
6 2 7 1 3 5 8 4 
6 2 7 1 4 8 5 3 
6 3 1 7 5 8 2 4 
6 3 1 8 4 2 7 5 
6 3 1 8 5 2 4 7 
6 3 5 7 1 4 2 8 
6 3 5 8 1 4 2 7 
6 3 7 2 4 8 1 5 
6 3 7 2 8 5 1 4 
6 3 7 4 1 8 2 5 
6 4 1 5 8 2 7 3 
6 4 2 8 5 7 1 3 
6 4 7 1 3 5 2 8 
6 4 7 1 8 2 5 3 
6 8 2 4 1 7 5 3 
7 1 3 8 6 4 2 5 
7 2 4 1 8 5 3 6 
7 2 6 3 1 4 8 5 
7 3 1 6 8 5 2 4 
7 3 8 2 5 1 6 4 
7 4 2 5 8 1 3 6 
7 4 2 8 6 1 3 5 
7 5 3 1 6 8 2 4 
8 2 4 1 7 5 3 6 
8 2 5 3 1 7 4 6 
8 3 1 6 2 5 7 4 
8 4 1 3 6 2 7 5 

Найти строку и вывести № которая содержит числа в определенном порядке 4 2 7 3 6 8 5 1, т.е. №33. в программе выше перед удалением массива код с ошибкой, программа выводит № 51. Помогите исправить ошибку.

Andrej Levkovitch's user avatar

задан 16 авг 2018 в 8:54

Nikolay Pshenichnyy's user avatar

2

У вас проблема в логике цикла:

for (int a = 0; a < 1; a++) {
  for (int b = cols - 1; b >= 0; b--) {
    sbd = arr[a][b];//я так понимаю вы сдесь берете элементы первой строки с конца
    for (int j = 0; j < cols; j++) {
      for (int i = 0; i < rows; i++) {//и зачем-то сравниваете с каждым элементом
        if (arr[i][j] == sbd) {
          m = i + 1;//а это типо сохранение результата чтоли?
        }
      }
    }
  }
  cout << m << " ";
}
cout << endl;

Естественно это не работает так как вы хотели. Почему бы не взять значения, которые вы выбрали для сравнения в массив и сравнивать их построчно?

int temp[cols]{};

for (int i = cols - 1, count = 0; i >= 0; --i, ++count) {
  temp[count] = arr[0][i];
}

std::cout << std::endl;
for (int i = 0; i < cols; ++i) {
  std::cout << temp[i];
}
std::cout << std::endl;

bool solution{true};
for (int i = 0; i < rows; i++) {
  solution = true;
  for (int j = 0; j < cols; ++j) {
    if (temp[j] != arr[i][j]) {
      solution = false;
      break;
    }
  }
  if (solution  == true) {
    cout << i << " ";
  }
}
cout << endl;

ответ дан 16 авг 2018 в 9:44

Andrej Levkovitch's user avatar

Andrej LevkovitchAndrej Levkovitch

7,9892 золотых знака16 серебряных знаков42 бронзовых знака

2

#include <iostream>

using namespace std;


int main()
{
const int rows = 92;
const int cols = 8;


int m;
int i;
int j;
int sbd;

int **arr = new int* [rows];

for (int i = 0; i < rows; i ++)
{
arr[i] = new int [cols];
}



for (int i = 0; i < rows; i ++)
{
for (int j = 0; j < cols; j ++)
{
    cin >> arr [i][j];
}
} 


int m;
int sbd;
for (int j = 0; j < cols; )
{    
int t = 0;
for(int a = 0; a < 1; a ++)
{
for (int b = cols - 1; b >=0; )
{  
    sbd = arr [a][b];
for (int i = t; i < rows; )
{ 
    if (arr [i][j] != sbd)
    {
        i ++;
    }
    else if (arr [i][j] == sbd)
    {
        t = i;
        j ++;
        b --;
        if (b == 0)
        {
            m = i;
        }
        break;
    }
}
}
}
}
cout << m + 1;
cout << endl; 

for (int i = 0; i < rows; i++)
{
   delete[]arr[i];
} 
delete[]arr;
return 0;
}

Ошибка исправлена)))

ответ дан 17 авг 2018 в 17:35

Nikolay Pshenichnyy's user avatar

ufaclub

0 / 0 / 0

Регистрация: 16.02.2013

Сообщений: 48

1

Определить номер строки имея массив по значению

12.09.2015, 21:43. Показов 3273. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

скрипт выводит 10 строк.
первое число это номер квартиры. а через дефис — ее порядковый номер.

PHP
1
2
3
4
5
6
7
8
9
$query = "SELECT * FROM cms_build  WHERE title = 7 and  flour = 7 Order by number  ASC";
$res = mysql_query( $query );
$i=0; 
while ( $item = mysql_fetch_array( $res ) )
{
echo $item['number']';
echo '-';
echo ++$i;
}

получаем

HTML5
1
2
3
4
5
6
7
8
9
10
33-1
34-2
35-3
36-4
37-5
38-6
39-7
40-8
177-9
178-10

мне нужно как то по переменной $number в которой содержит номер квартиры вывести ее порядковый номер (тот что через дефис) использую тот массив что создает выше скрипт

помогите пожалуйста составить скрипт. определения порядкового номера. например в переменную $kv



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

12.09.2015, 21:43

8

Эксперт PHP

4845 / 3857 / 1599

Регистрация: 24.04.2014

Сообщений: 11,316

12.09.2015, 21:58

2

Лучший ответ Сообщение было отмечено ufaclub как решение

Решение

Цитата
Сообщение от ufaclub
Посмотреть сообщение

мне нужно как то по переменной $number в которой содержит номер квартиры вывести ее порядковый номер (тот что через дефис)

А разве он уже не выводится? После —

Цитата
Сообщение от ufaclub
Посмотреть сообщение

33-1 34-2 35-3 36-4 37-5 38-6 39-7 40-8 177-9 178-10

Цитата
Сообщение от ufaclub
Посмотреть сообщение

помогите пожалуйста составить скрипт. определения порядкового номера. например в переменную $kv

Если ты выводишь этот номер, то в чем сложность поместить его в переменную?



0



0 / 0 / 0

Регистрация: 16.02.2013

Сообщений: 48

12.09.2015, 22:09

 [ТС]

3

я вывожу его с помощью ++$i в базе его нет. вот в чем проблема



0



Эксперт PHP

4845 / 3857 / 1599

Регистрация: 24.04.2014

Сообщений: 11,316

12.09.2015, 22:09

4

Цитата
Сообщение от ufaclub
Посмотреть сообщение

вот в чем проблема

и в чем же?



0



ufaclub

0 / 0 / 0

Регистрация: 16.02.2013

Сообщений: 48

13.09.2015, 16:13

 [ТС]

5

PHP
1
2
3
4
5
6
7
8
$res = mysql_query("SELECT * FROM cms_build  WHERE title = 7 and  flour = 7 Order by number  ASC");
$array=array();
$i=1;
while($item=mysql_fetch_array($res)) {
    $array[$item['number']]=$i;
    ++$i;
}
print_r($array);

вот результат

HTML5
1
Array ( [17] => 1 [18] => 2 [19] => 3 [20] => 4 [21] => 5 [22] => 6 [23] => 7 [24] => 8 [169] => 9 [170] => 10 [171] => 11 [172] => 12 [254] => 13 [255] => 14 [256] => 15 [257] => 16 [258] => 17 [259] => 18 [260] => 19 [424] => 20 [425] => 21 [426] => 22 [427] => 23 [428] => 24 [429] => 25 [430] => 26 [431] => 27 )

т.е массив $array содержит правильную информацию.

т.е 17 квартира имеет номер планировки 1 [17] => 1

единственное что не могу доделать дописать скрипт чтобы он использовал переменную $number в которой и есть номер квартиры (тот что в []) и в результате выводит то значение что после =>

ну и значение в переменную $kvplan записывалось



0



Эксперт PHP

3827 / 3178 / 1334

Регистрация: 01.08.2012

Сообщений: 10,768

13.09.2015, 16:17

6

ufaclub, ничего не понятно. Что за $number (она нигде не объявлена), что там должно быть и где выводиться? И аналогично с $kvplan.



0



ufaclub

0 / 0 / 0

Регистрация: 16.02.2013

Сообщений: 48

13.09.2015, 16:27

 [ТС]

7

$number содержит номер квартиры . она уже известна. например в примере можно использовать $number=17

т.е подставляем переменную $number=17 а скрипт из массива который создает

PHP
1
2
3
4
5
6
7
8
$res = mysql_query("SELECT * FROM cms_build  WHERE title = 7 and  flour = 7 Order by number  ASC");
$array=array();
$i=1;
while($item=mysql_fetch_array($res)) {
    $array[$item['number']]=$i;
    ++$i;
}
print_r($array);

Array ( [17] => 1 [18] => 2 [19] => 3 [20] => 4 [21] => 5 [22] => 6 [23] => 7 [24] => 8 [169] => 9 [170] => 10 [171] => 11 [172] => 12 [254] => 13 [255] => 14 [256] => 15 [257] => 16 [258] => 17 [259] => 18 [260] => 19 [424] => 20 [425] => 21 [426] => 22 [427] => 23 [428] => 24 [429] => 25 [430] => 26 [431] => 27 )

вытаскивает номер планировки и записывает ее в $kvplan.

т.е если $number=17 то $kvplan=1



0



Jodah

Эксперт PHP

3827 / 3178 / 1334

Регистрация: 01.08.2012

Сообщений: 10,768

13.09.2015, 16:43

8

Лучший ответ Сообщение было отмечено ufaclub как решение

Решение

PHP
1
2
$number = 17;
$kvplan = $array[$number];

Так?



1



0 / 0 / 0

Регистрация: 16.02.2013

Сообщений: 48

13.09.2015, 18:44

 [ТС]

9

бинго. Сработало! Jodah спасибо!



0



uses crt;
var a:array[1..100,1..100] of integer;
    b:array[1..100] of real;
    i,j,n,m,tempi:integer;
    min:real;
 begin
 ClrScr;
 Randomize;
 repeat
  Write('n=');
  Readln(n);
  Write('m=');
  Readln(m);
 until (n>1) and (m>1);
  for i:=1 to n do
   begin
    for j:=1 to m do
     begin
      a[i,j]:=-10+random(20);
      Write(a[i,j]:4);
     end;
    Writeln;
   end;
  b[i]:=0;
   for i:=1 to n do
    for j:=1 to m do
     b[i]:=b[i]+a[i,j];
  min:=1;
   for i:=1 to n do
    begin
     Write(b[i]/m:6:1);
      if (b[i]/m)<min then
       begin
        min:=(b[i]/m);
        tempi:=i;
       end;
    end;
   Writeln;
   Writeln('Минимальный ',min:3:1);
   Writeln('Строка ',tempi);
   Readln;
  end.

 

Лонгон Ис

Пользователь

Сообщений: 3
Регистрация: 09.01.2023

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

Прикрепленные файлы

  • пример.xlsm (14.82 КБ)

Изменено: Лонгон Ис09.01.2023 13:05:26

 

Jack Famous

Пользователь

Сообщений: 11027
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#2

09.01.2023 13:13:54

Лонгон Ис, здравствуйте

Логика не обнаружена

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

DemonAMT

Пользователь

Сообщений: 423
Регистрация: 24.01.2020

Добрый День!
-В ячейку вставляем нужный параметр.
-Данные/Обновить все

Прикрепленные файлы

  • пример.xlsm (22.24 КБ)

 

Лонгон Ис

Пользователь

Сообщений: 3
Регистрация: 09.01.2023

Jack Famous

, в этом и сложность, для начала нужно сцепить ячейки столбцов A и B и только потом найти нужное значение. Мне нужно найти номер строки, значение ячейки в столбце которой равно «b3», но чтобы в соседней ячейке было значение «5», если искать только по A, то значений «b3» — 2 штуки.

 

Jack Famous

Пользователь

Сообщений: 11027
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#5

09.01.2023 13:21:45

Цитата
Лонгон Ис: для начала нужно сцепить ячейки столбцов A и B и только потом найти нужное значение

и как это можно «понять», если в примере этого нет? Будет нормальный пример — будет и решение. Или ждите местных гадателей…

Изменено: Jack Famous09.01.2023 13:22:04

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

bigorq

Пользователь

Сообщений: 795
Регистрация: 26.04.2018

Формулой
=INDEX(ROW(A1:A7);MATCH(«b35»;A1:A7&B1:B7;0))

 

Jack Famous

Пользователь

Сообщений: 11027
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#7

09.01.2023 13:29:26

Цитата
Jack Famous: и как это можно «понять», если в примере этого нет?

пардоньте, в описании у вас что-то такое есть, но для меня пример первичен всё-таки  :)

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

artemkau88

Пользователь

Сообщений: 553
Регистрация: 09.10.2019

#8

09.01.2023 17:32:51

Лонгон Ис

, можно использовать функцию линейного поиска:

Код
Sub Макрос1()
Dim i As Long, res() As String, j As Long, what
arr = Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row)
j = 1
    For i = LBound(arr, 1) To UBound(arr, 1)
        ReDim Preserve res(1 To j)
        res(j) = arr(i, 1) & "-" & arr(i, 2)
        j = j + 1
    Next i
what = linear_search(res, "b6-6")
End Sub
Private Function linear_search(arr, x) As Variant
    Dim i
    i = LBound(arr)
    While arr(i) <> x And i < UBound(arr, 1)
        i = i + 1
    Wend
    linear_search = IIf(i = UBound(arr) And x <> arr(i), -1, i)
End Function

Прикрепленные файлы

  • найти_в_массиве.xlsb (14.54 КБ)

Изменено: artemkau8809.01.2023 17:33:41

 

Григорий Калюга

Пользователь

Сообщений: 156
Регистрация: 01.01.1970

#9

09.01.2023 18:38:13

Доброго дня!

Цитата
Лонгон Ис написал:
Я беру в массив столбец А и B

если Вы уже взяли в массив столбцы, то почему бы не взять туда же и адреса или номера строк? А дальше не нужно никакого сцепить — работаем просто с массивом и условиями …
Короче, пример и ТЗ оччень специфично поставлены. Вы в теме, а мы нет и, если Вы нам не объясните: что будет если то или это, то мы и не догадаемся. Да, да! Мы, увы не экстрасенсы …

 

Лонгон Ис

Пользователь

Сообщений: 3
Регистрация: 09.01.2023

Спасибо большое всем за ответы.

Григорий Калюга

, к сожалению не знаю как взять в массив адреса и строки, но я понял, поищу — найду как это делается.

 

_Boroda_

Пользователь

Сообщений: 1496
Регистрация: 27.07.2013

Контакты см. в профиле

#11

10.01.2023 13:02:23

Если Вы делаете массив и потом несколько раз по нему ищете, то лучше использовать словарь
А если один раз, то прямо в цикле не объединяйте, а сразу проверяйте сначала первое значение, если совпадет, то второе
Пример со словарем

Код
Sub Макрос1()
    znach = "b3-5"    ' нужно найти строку этого значения
    arr = Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row)
    Set slov = CreateObject("Scripting.Dictionary")
    With slov
        For i = UBound(arr, 1) To 1 'если есть одинаковые, в словарь попадет то значение, у которого номер строки меньше
            .Item(arr(i, 1) & "-" & arr(i, 2)) = i
        Next i
        nom = .Item(znach)
    End With
End Sub

Скажи мне, кудесник, любимец ба’гов…

 

Григорий Калюга

Пользователь

Сообщений: 156
Регистрация: 01.01.1970

#12

10.01.2023 19:44:21

Доброго времени суток!

Цитата
Лонгон Ис написал:
… к сожалению не знаю как взять в массив адреса и строки…

ну, например так: на скрепке прикрепил вариант. Делал через массивы, так что не пинайте сильно ;)

Прикрепленные файлы

  • UznatNomRow.xlsb (20.88 КБ)

 

Anchoret

Пользователь

Сообщений: 1065
Регистрация: 01.01.1970

Anchoret

#13

11.01.2023 00:59:16

Код
Sub aaaa()
Dim DC As Object, RR As Range, sh As Worksheet
Set sh = ActiveSheet
'--- создаем словарь-------
Set DC = CreateObject("Scripting.Dictionary")
'--- заполняем словарь------- в случае нахождения дублей по ключу(столбец "А") в качестве значения будет записано последнее значение
For Each RR In sh.Range("A1:A" & sh.Cells(sh.Rows.Count, "A").End(xlUp).Row).Cells
  DC.Item(RR.Value) = RR.Offset(, 1).Value
Next
'-------------
Debug.Print "b3 = " & DC.Item("b3")
End Sub

Понравилась статья? Поделить с друзьями:
  • Как найти график функции температуры
  • Как найти параметры долгосрочного равновесия
  • Как найти основание равнобедренного треугольника через синус
  • Как найти короткую дорогу информатика
  • Растягивание текстур в играх как исправить