現在入れた文字列の射影を取るメソッドを使っているのですが、その際に引数に指定した配列(ソースのa)がなぜだか変化してしまいます。
ソースを見ても原因がわからず、dupやcloneを使っても変化してしまうためお手上げ状態です。
ものすごく基本的な質問ですが、良ければ原因をお教え下さい。
lang
1def projection(db , series) 2 3 wo=0 4 5 while wo<db.length #dbの配列数 6 7 wi=0 8 while wi < series.length #系列の配列数だけ回す。 9 10 wa = 0 11 while wa < db[wo].length #db[wo]の配列数だけ回す。 12 13 14 if db[wo][wa].index(series[wi]) != nil #db配列要素の中に系列要素があった場合、if文の中に入る。 15 16 wu=0 #系列がある配列要素より前のdb配列要素をすべてカット 17 while wu < db[wo].length 18 db[wo][wu]=db[wo][wa+wu] 19 wu=wu+1 20 end 21 22 wu=0 #配列要素内の系列までの文字をすべてカット 23 we=db[wo][0].index(series[wi]) #dbの一つ目の系列がある場所 24 we = we+(series[wi].length-1) 25 while wu <= we 26 db[wo][0].slice!(0) 27 wu=wu+1 28 end 29 30 db[wo][0].insert(0,"_") #カットした場所に_を置く。 31 32 if db[wo][0]=="_\n" #カットしたことで配列の中身が_と改行のみになった場合、カットする。。 33 wu=0 34 while wu < db[wo].length 35 db[wo][wu]=db[wo][wu+1] 36 wu=wu+1 37 end 38 end 39 40 41 break 42 end 43 wa=wa+1 44 end 45 wi=wi+1 46 end 47 db[wo].compact! #空になった配列要素をカット 48 49 50 wo=wo+1 51 end 52 db.compact! #空になった配列要素をカット 53 return db 54end 55 56 57 58 59 60a=[["1234567890","123456789"],["1234567890","123456789"]] 61b=["3"] 62 63c=projection(a , b) 64 65p a 66
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/01 16:19