<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Сравнение переменной с масивом]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=13657</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13657&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Сравнение переменной с масивом».]]></description>
		<lastBuildDate>Sun, 29 Apr 2018 22:00:26 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125006#p125006</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 29 Apr 2018 22:00:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125006#p125006</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=125000#p125000</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 29 Apr 2018 14:25:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=125000#p125000</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124999#p124999</link>
			<description><![CDATA[<p>А причём тут HasKey? Мы, вроде, о значениях ключей говорим, а не об их названиях. Или я неверно понял задачу.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 29 Apr 2018 14:24:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124999#p124999</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124998#p124998</link>
			<description><![CDATA[<div class="quotebox"><cite>seriyforum пишет:</cite><blockquote><p>Почитал, но так и не нашёл решения.</p></blockquote></div><p>Object.HasKey(Key)</p>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Sun, 29 Apr 2018 14:20:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124998#p124998</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124996#p124996</link>
			<description><![CDATA[<p>Благодарю за совет! Постараюсь соответствовать.</p><p>Путаницы нет. Уверяю Вас, что понимаю эту механику ровно так же, как Вы и описали. Лишь акцентирую внимание на том, что для себя, подразумеваю различный подход, как к концепциям массива и списка. Именно это может вызывать ощущение такой коллизии, но то, лишь ощущение.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Sun, 29 Apr 2018 11:49:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124996#p124996</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124992#p124992</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 29 Apr 2018 03:15:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124992#p124992</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124991#p124991</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Sun, 29 Apr 2018 01:25:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124991#p124991</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124990#p124990</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sun, 29 Apr 2018 00:05:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124990#p124990</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124989#p124989</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Sat, 28 Apr 2018 23:55:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124989#p124989</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124988#p124988</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 28 Apr 2018 23:22:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124988#p124988</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124987#p124987</link>
			<description><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>... один из ключей может быть удалён без смещения остальных, а нам, к примеру, нужно найти ключ, равный пустому значению...</p></blockquote></div><p>Как подумалось мне об этом, что некоторый ключ из линейного массива &quot;[]&quot; может быть удалён, при том так, что его имя теперь не числовое значение, а пустое (&quot;&quot;), но при этом, его ёмкость осталась прежней.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Sat, 28 Apr 2018 23:17:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124987#p124987</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124985#p124985</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Malcev)]]></author>
			<pubDate>Sat, 28 Apr 2018 23:08:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124985#p124985</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124984#p124984</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Sat, 28 Apr 2018 22:56:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124984#p124984</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124983#p124983</link>
			<description><![CDATA[<p>Спасибо</p>]]></description>
			<author><![CDATA[null@example.com (seriyforum)]]></author>
			<pubDate>Sat, 28 Apr 2018 20:49:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124983#p124983</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Сравнение переменной с масивом]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=124982#p124982</link>
			<description><![CDATA[<div class="quotebox"><cite>KusochekDobra пишет:</cite><blockquote><p>для таких - &quot;[]&quot; объектов я использую Loop</p></blockquote></div><p>Это не всегда корректно, один из ключей может быть удалён без смещения остальных, а нам, к примеру, нужно найти ключ, равный пустому значению, в этом случае ваш код даст ложноположительный результат. For-loop лучше использовать всегда.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Sat, 28 Apr 2018 20:38:32 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=124982#p124982</guid>
		</item>
	</channel>
</rss>
