[RUBY] `Array # index` kann nicht von der Mitte aus gesucht werden,` String # index` kann es sein

Umgebung: Ruby 2.7.1

Referenzhandbuch:


Betrachten Sie beispielsweise "Suchen nach einem Index, der 1 ist, aus einem Array, das nur aus Nullen und Einsen für jedes Element besteht, und Verarbeiten von etwas". Wenn Sie es nur finden möchten, können Sie es mit "each_with_index" usw. tun. Wenn es sich jedoch um einen komplizierten Vorgang handelt, z. B. um das Umschreiben des ursprünglichen Arrays (was sich auf die nachfolgende Suche auswirken kann), müssen Sie mit einer Schleifenanweisung Ihr Bestes geben.

Im Fall von Ruby kann die Position durch ** Array # index ** angegeben werden, ohne den Index zu schleifen. Dies hat jedoch seine Nachteile: ** Es kann nicht aus der Fortsetzung des letzten Males gesucht werden **.

seq = [1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1]

i = -1
while (i = seq.index(1, i + 1))
	#Komplexe Verarbeitung, die i erfordert
	p i
end
#=> ArgumentError (wrong number of arguments (given 2, expected 0..1))

Aber ** es kann mit einem String gemacht werden **.

seq = [1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1].map(&:chr).join

i = -1
while (i = seq.index(1.chr, i + 1))
	#Komplexe Verarbeitung, die i erfordert
	p i
end
#=> 0 2 4 5 6 7 11 14

Gleiches gilt für # rindex, das in umgekehrter Reihenfolge sucht.


Wenn Sie ein Array in eine Zeichenfolge ändern und mit "# index" suchen, gibt es die folgenden Funktionen.

[^ scp]: Beachten Sie auch die Möglichkeit, dass Zahlen in einem bestimmten Bereich nicht in Zeichen konvertiert werden können, z. B. im Bereich der Unicode-Ersatzpaare → 0xD800.chr ('UTF-8')

Recommended Posts

`Array # index` kann nicht von der Mitte aus gesucht werden,` String # index` kann es sein
Das Paket org.junit.jupiter.api wurde nicht gefunden.
Löscht nach dem angegebenen Zeichen aus der Zeichenfolge