2

私は2つの配列を持っています。マッパーが 1 人、私の ID が 1 人。

外部 ID を持つ私の配列:

genres_array = [12,28,16]

マッパー配列 (内部 ID、外部 ID)

mapper = [
   [1,12],
   [2,18],
   [3,19],
   [4,28],
   [5,16],
   [6,90],
]

結果として、genres_array の内部値のみを持つ新しい配列が必要です (genres_array には最初に外部値がありました)。この場合、結果は次のようになります。[1,4,5]

私は多くの方法を試しましたが、この単純な問題をきれいな方法で解決する方法が本当にわかりません. 私はそれが次のようなものになると確信しています

genres_array.map { |genre_id| get_internal_id_from_mapper }

PS: マッパーで ID が見つからない場合もあります。その場合、配列から削除したいだけです。何か案が?

4

3 に答える 3

1

あなたが探しているrassoc

genres_array.map { |genre_id| mapper.rassoc(genre_id)[0] }

その結果、

[1, 4, 5]

編集:PSを読んでください-次のようなことを試してください:

genres_array.map { |genre_id|
    subarr = mapper.rassoc genre_id
    subarr[0] if subarr
}.compact

次に、

genres_array = [12,28,100,16]

あなたはまだ出力を得るでしょう

[1, 4, 5]
于 2013-11-08T22:38:55.110 に答える
1

外部 ID が見つからない場合に例外をスローしない別の方法:

genres_array = [12,28,16]

mapper = [
   [1,12],
   [2,18],
   [3,19],
   [4,28],
   [5,16],
   [6,90],
]

internal_ids = genres_array.map do |genre_id|
  element = mapper.detect { |m| m[1] == genre_id }
  element ? element[0] : nil
end.compact
于 2013-11-08T22:41:47.703 に答える