2

この仕事を手伝ってくれる人はいますか?

array.each_with_index do |buffer,index|

    if array[index][8] == array[1..7][8]
      puts "match found"
    end
end

ダブレットがあるかどうかを比較したいのですが、検索範囲をインデックス以外の 1 から 7 までの配列インデックス値に定義するにはどうすればよいですか?

明確にするために、比較したいarray[1][8],[2][8],[3][8]などを除いて[index][8]

4 助けてくれてありがとう...

4

4 に答える 4

1
ar =  [1,2,8,4,5,6,7,8]
last = ar.last
puts "match found" if ar[0..-2].any?{|el| el == last} # => match found

難しい部分はおそらくar[0..-2]ビットです。ar[1..-1]2番目の要素から最後までスライスされた配列になります。ar[0..-2]最初から最後まですべてマイナス 1 を取ります。これは、1 つの一致が見つかった後に終了することに注意してください。次のコードは、一致をカウントします。

ar =  [1,2,8,4,5,6,7,8]
puts "found #{ar[0..-2].count(ar.last)} matches."
于 2012-11-28T00:06:14.480 に答える
0

ダブレットを数えますか?

array[0..-2].find_all{|el| el == array.last}.length

それとも、各ダブレットのインデックス値が必要ですか?

hash = Hash.new { |h,k| h[k] = [] }

array[0..-2].each_with_index do |el, idx|
  hash[el] << idx if el == array.last
end
于 2012-11-28T01:36:01.540 に答える
0

group_byダブレットのグループを作成するために使用できます。

array.group_by {|v| v[8] }

これにより、 のハッシュが得られます{"group key" => ["group", "members"]}

すべてのダブレットのリストを取得するには、複数のメンバーを持つグループを選択するだけです:

array.group_by {|v| v[8] }.values.select {|g| g.length > 1 }

さらに、リストからダブレットを削除するには:

array.group_by {|v| v[8] }.values.map(&:first)

これにより、ダブレットが削除された新しい配列が返されるため、特定のダブレットの最初のアイテムのみが返されます。

array = [
  %w(1 2 3 4 5 6 7 8 9),
  %w(1 2 3 4 5 6 7 8 9),
  %w(a b d e f g h i j),
  %w(a b d e f g h i j),
  %w(j k l m n o p q r)
]

pp array.group_by {|v| v[8] }.values.map(&:first)

# Output:
# [["1", "2", "3", "4", "5", "6", "7", "8", "9"],
# ["a", "b", "d", "e", "f", "g", "h", "i", "j"],
# ["j", "k", "l", "m", "n", "o", "p", "q", "r"]]
于 2012-11-28T07:25:06.650 に答える
0

配列の配列がありますよね?index 番目の配列の 8 番目の値の double があるかどうかを確認しますか?

array.map{|a| a[8]}.count(array[index][8]) > 1

最後の要素が配列で繰り返されているかどうかを確認するには、次のようにします。

array[0...-1].include? array.last
于 2012-11-28T07:08:12.070 に答える