<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Сравнение переменной с масивом]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13657&amp;type=atom" />
	<updated>2018-04-29T22:00:26Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=13657</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=125006#p125006" />
			<content type="html"><![CDATA[<p>Предлагаю так:</p><div class="codebox"><pre><code>arr := {5: 1, e: 2, &quot;&quot;: 3, 0:2}
if HasValue(2, arr)
	MsgBox % &quot;Ключей с искомым значением найдено - &quot; HasValue(2, a).Length() &quot;,`nпервый по порядку ключ - &quot; HasValue(2, a).1

HasValue(var, arr) {
	arrOfKeys := {}
	for key, value in arr
		if (value == var)
			arrOfKeys.Push(key)
	return (arrOfKeys.Length() = 0) ? false : arrOfKeys
}</code></pre></div><p>Если значения нет, возвращает 0, иначе массив ключей, имеющих искомое значение.</p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2018-04-29T22:00:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=125006#p125006</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=125000#p125000" />
			<content type="html"><![CDATA[<p>Ох, попутал. А ведь я даже писал велосипед для этой проблемы полтора года назад:<br /><a href="https://autohotkey.com/boards/viewtopic.php?f=13&amp;t=23286">https://autohotkey.com/boards/viewtopic … mp;t=23286</a><br />Продублирую код:<br /></p><div class="codebox"><pre><code>; Ф-ия возвращает индекс первого элемента с искомым значением, если таковой есть в массиве.
; Если значение в массиве не найдено возвращает 0.
; Опциональный параметр - номер индекса, с которого ведется поиск (только для простых массивов с последовательным неизмененным индексом. Если применялся .Delete(), то применять параметр нельзя)

indexOf(Arr, needle, fromIndex:=1) {
	if (fromIndex = 1) {
		for index, value in Arr
			if (value = needle)
				return index
	} else
		loop % Arr.MaxIndex() - fromIndex + 1
			if (needle = Arr[A_Index + fromIndex - 1])
				return A_Index + fromIndex - 1
	return false
}</code></pre></div><p>UPD: В свете того, что в AHK нет простых массивов, код надо безопасно переделать.</p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2018-04-29T14:25:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=125000#p125000</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124999#p124999" />
			<content type="html"><![CDATA[<p>А причём тут HasKey? Мы, вроде, о значениях ключей говорим, а не об их названиях. Или я неверно понял задачу.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-04-29T14:24:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124999#p124999</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124998#p124998" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>seriyforum пишет:</cite><blockquote><p>Почитал, но так и не нашёл решения.</p></blockquote></div><p>Object.HasKey(Key)</p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2018-04-29T14:20:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124998#p124998</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124996#p124996" />
			<content type="html"><![CDATA[<p>Благодарю за совет! Постараюсь соответствовать.</p><p>Путаницы нет. Уверяю Вас, что понимаю эту механику ровно так же, как Вы и описали. Лишь акцентирую внимание на том, что для себя, подразумеваю различный подход, как к концепциям массива и списка. Именно это может вызывать ощущение такой коллизии, но то, лишь ощущение.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2018-04-29T11:49:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124996#p124996</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124992#p124992" />
			<content type="html"><![CDATA[<p>Уважаю и даже разделяю ваше желание следовать определённой семантике, но код при этом предпочтительно должен оставаться корректным в контексте того ЯП, в котором он используется. Особенно, если выложен в паблик. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p><div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>целесообразность Delete(), для меня, очень спорна в отношении линейного массива, да и в справке намекают о применительной способности этого метода, подразумевая объект</p></blockquote></div><p>У вас небольшая путаница с понятием &quot;объект&quot;. В AHK объект — это общее название для всех возможных объектов. [] — это &quot;простой&quot; или &quot;линейный&quot; массив, {} — ассоциативный массив. Но по сути оба являются ассоциативными массивами, первый — частный случай второго. О применительной способности — смотрите дальше, там в примере именно [].</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-04-29T03:15:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124992#p124992</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124991#p124991" />
			<content type="html"><![CDATA[<p>Скажу, что свой путь в программировании начинал с материала сразу трёх учебников по C# - это &quot;Базовый курс по C# от 2008г&quot;, Троелсен &quot;C# 4.0&quot; и Шидлт, с похожим названием. Все они объясняли по разному, в немного разном порядке, но одинаковый материал, что давало возможность смотреть на него с разных ракурсов глазами человека, не имеющего абсолютно никакой сравнительной базы. Как если бы ходить учился. Исходя из усвоенного, подразумеваю массивы с индексом начинающимся от нуля - фундаментальным представлением массива. Правда, в C# все переменные строго типизированы и в такой массив нельзя помещать строки и числа, но это позволяют делать коллекции. В чём-то, я проецирую усвоенное, на практику в AHK, считая полезным порядок из материала учебников, перенятый не абсолютно, но до какой-то меры. Например, for - это цикл со счётчиком, имеющим свою аналогию в loop. Все примеры с массивами, в книгах, были с участием только этого цикла, тогда как для коллекций, наследующих энумератор от базового прототипа object, применялся foreach, перебирающий свойства аналогично &quot;for k, v in obj&quot;. Некоторые такие детали прочно обосновались в голове, но я ещё не испытывал каких-либо сложностей в связи с этим.</p><p>То, о чём последние сообщения этой беседы, лишь вопрос личных предпочтений и раз о вкусах не спорят, то знать их, как минимум, полезно.<br />Я, например, предпочту собрать хендлы окон в &quot;коллекцию&quot; {} с именованными полями, если для меня важно обращаться к ним по именам, раз по определению они должны быть константны, или буду рассматривать такой объект, набранный через Push() - как {}, потому как на это прямо указывает семантика самого определения и последнее, не отменяет того, что такой объект заблаговременно подразумевается как {}, ещё на этапе написания, что в свою очередь продолжает разделять понятия [] и {}, в моём понимании.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2018-04-29T01:25:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124991#p124991</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124990#p124990" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Это я понимаю, но целесообразность Delete(), для меня, очень спорна в отношении линейного массива</p></blockquote></div><p>Простой пример — собираем в массив хэндлы каких-либо окон. Когда окно уничтожается, имеет смысл ключ с ним удалять, а если мы хотим, чтобы оставшиеся хэндлы продолжали находиться на своих местах — будем удалять с помощью Delete().<br /></p><div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>Я же говорю, что стараюсь разделять эти понятия, где массив это - [], а объект - {}</p></blockquote></div><p>В некоторых случаях в этом есть смысл, в некоторых нет. Что скажете о массиве, индексы которого начинаются с 0? В какую категорию он должен войти?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-04-29T00:05:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124990#p124990</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124989#p124989" />
			<content type="html"><![CDATA[<p>Это я понимаю, но целесообразность Delete(), для меня, очень спорна в отношении линейного массива, да и в справке намекают о применительной способности этого метода, подразумевая объект:<br /></p><div class="quotebox"><blockquote><p>Removes key-value pairs from an object.</p></blockquote></div><p>Я же говорю, что стараюсь разделять эти понятия, где массив это - [], а объект - {}, что само по себе подразумевает разный подход. Как, например, рубашка и куртка, или носки и ботинки - в этих парах, каждый из объектов имеет сильно схожие функциональные особенности, однако же применяются только для своих целей. Можно конечно и куртку на голое тело одевать, а рубашку сверху, или в одних носках гонять по сугробам зимой, но я это трактую как применение Delete() для [] - спорно.</p><p>Но раз кто-то может себе такое позволить, то замечание весьма уместно, за что уже успел откланяться. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2018-04-28T23:55:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124989#p124989</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124988#p124988" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>arr := [1, &quot;&quot;, 3, &quot;&quot;]
arr.Delete(2)
var := &quot;&quot;

MsgBox, % VarInArr(var, arr)  ; возвращает 2

for k in arr
   MsgBox, % k

; как видим, ключа &quot;2&quot; не существует

VarInArr(var, arr) {
   Loop,% arr.Length()
      if (arr[ A_Index ] == var)
         return A_Index
   return 0
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-04-28T23:22:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124988#p124988</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124987#p124987" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>... один из ключей может быть удалён без смещения остальных, а нам, к примеру, нужно найти ключ, равный пустому значению...</p></blockquote></div><p>Как подумалось мне об этом, что некоторый ключ из линейного массива &quot;[]&quot; может быть удалён, при том так, что его имя теперь не числовое значение, а пустое (&quot;&quot;), но при этом, его ёмкость осталась прежней.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2018-04-28T23:17:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124987#p124987</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124985#p124985" />
			<content type="html"><![CDATA[<p>Наверное подойдет такой пример:<br /></p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>нужно найти ключ, равный пустому значению, в этом случае ваш код даст ложноположительный результат</p></blockquote></div><div class="codebox"><pre><code>arr := [,&quot;&quot;]
var := &quot;&quot;
Loop,% arr.Length()
   if (arr[ A_Index ] == var)
      msgbox % A_Index
msgbox For-loop
For index, value in arr
   if (value = var)
      msgbox % index</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2018-04-28T23:08:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124985#p124985</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124984#p124984" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>для таких - &quot;[]&quot; объектов я использую Loop</p></blockquote></div><p>Это не всегда корректно, один из ключей может быть удалён без смещения остальных, а нам, к примеру, нужно найти ключ, равный пустому значению, в этом случае ваш код даст ложноположительный результат. For-loop лучше использовать всегда.</p></blockquote></div><p>Благодарю! Весьма уместно, хотя не приходит на ум ни одного примера. Подскажите пожалуйста, как можно удалить из такого массива ключ, чтобы его значение осталось прежним, от чего его ёмкость не поменяется и для чего в нём искать ключ с пустым значением, если доступ к его элементам априори по индексу?</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2018-04-28T22:56:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124984#p124984</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124983#p124983" />
			<content type="html"><![CDATA[<p>Спасибо</p>]]></content>
			<author>
				<name><![CDATA[seriyforum]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39171</uri>
			</author>
			<updated>2018-04-28T20:49:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124983#p124983</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=124982#p124982" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>для таких - &quot;[]&quot; объектов я использую Loop</p></blockquote></div><p>Это не всегда корректно, один из ключей может быть удалён без смещения остальных, а нам, к примеру, нужно найти ключ, равный пустому значению, в этом случае ваш код даст ложноположительный результат. For-loop лучше использовать всегда.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2018-04-28T20:38:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=124982#p124982</id>
		</entry>
</feed>
