0

配列を昇順でソートし、配列から値を選択して新しい配列に入れるのに問題があります。

# Splitting dance scores with "," and putting into arrays.
for dancers in results
  a = dancers.split(",")

  couplenumber = a[0]
  score1 = a[1]
  score2 = a[2]
  score3 = a[3]
  score4 = a[4]
  score5 = a[5]
  score6 = a[6]
  score7 = a[7]
  dancescores << Dancer.new(couplenumber, score1, score2, score3, score4, score5, score6, score7)
  # Sorts the array into ascending order, and shows the 4 lowest values.
  #p dancescores.sort.take(4)

  # Getting the m value, from picking the 4th lowest number.
  m = a[4]
  newtest = [couplenumber, m]
  coupleandscore << newtest
  coupleandscore
end
puts coupleandscore

現在、新しい配列の元の値が得られます。しかし、私がやろうとすると

p dancescores.sort.take(4)

次のエラーが表示されます。

[#<Dancer:0x10604a388 @score7=5, @score3=3, @score6=6, @score2=2, @score5=1, @score1=1,     @couplenumber="34", @score4=3>]
examtest.rb:43:in `sort': undefined method `<=>' for #<Dancer:0x10604a388> (NoMethodError)

どんな種類の助けも大歓迎です!

4

2 に答える 2

2

やりたいことをもっと正確に説明する必要があります。

私が理解したことから:

class Dancer

  attr_reader :number
  attr_reader :scores

  def initialize(number,scores)
    @number=number
    @scores=scores.sort
  end  
end

dancescores=[]

results.each do |result|
  scores = result.split(',')
  couplenumber = scores.shift
  dancescores << Dancer.new(couplenumber, scores)
end

# Now you can get the 4th score for each couple
dancescores.each do |dancers|
  p dancers.scores[3]
end
于 2012-11-29T15:08:35.010 に答える
0

<=>次のように Dancer に実装できます

class Dancer
  def sum_scores
    @score1 + @score2 + @score3 + @score4 + @score5 + @score6 + @score7
  end
  def <=> other_dancer
    sum_scores <=> other_dancer.sum_scores
  end
end

スコアの合計が総計になるだけだと思います。

更新:スコアリングは、並べ替えられたスコアの 4 番目の値に基づいています

class Dancer
  def scores
    [@score1,@score2,@score3,@score4,@score5,@score6,@score7]
  end
  def <=> other_dancer
   scores.sort[3] <=> other_dancer.scores.sort[3]
  end
end

コードで次の操作を行います。

for dancers in results
  a = dancers.split(",")

  couplenumber = a[0]
  score1 = a[1]
  score2 = a[2]
  score3 = a[3]
  score4 = a[4]
  score5 = a[5]
  score6 = a[6]
  score7 = a[7]
  dancescores << Dancer.new(couplenumber, score1, score2, score3, score4, score5, score6, score7)
end
puts dancescores.sort.map{|d| [d.couplenumber,d.scores.sort[3]]}
于 2012-11-29T14:35:27.187 に答える